Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Как получить полное имя файла в одну команду?

#linux #файлы #shell


Как получить полное (с путём относительно /) имя файла в одну команду?

Бывает, работаешь в консоли, и нужно скопировать /полный/путь/к/файлу, например,
чтобы в соседней консоли использовать его как аргумент для scp. Приходится вызывать
pwd, чтобы скопировать путь к текущей папке, и ls, чтобы скопировать имя файла. Можно
ли это сделать в одну команду?
    


Ответы

Ответ 1



readlink -f покажет /полный/путь/к/файлу.ext, дополнительно "раскрыв" все символические ссылки и заменив их на "канонические" пути. Пример показателен: $ cd /tmp $ mkdir foo $ touch foo/bar.ext $ ln -s foo/bar.ext baz.ext $ readlink -f foo/bar.ext /tmp/foo/bar.ext $ readlink -f baz.ext /tmp/foo/bar.ext Здесь /tmp/baz.ext является симлинком на /tmp/foo/bar.ext. Предложенное решение работает в Linux и FreeBSD, но не работает в Mac OS - у них там своя атмосфера.

Ответ 2



Предложу вариант чуть понавороченней: readlink -m файл | tr -d '\r\n' | xsel -b То есть: Читаем полный путь Сразу же копируем его в буфер обмена, предварительно ... ... вырезав конечные СR/LF (если не хотим, чтобы они добавлялись при вставке)

Ответ 3



Для файлов относительно текущего каталога echo ~+/file или с тем же результатом echo $PWD/file

Ответ 4



можно, например, подставлять то, что содержится в переменной окружения $PWD (или в любой другой переменной окружения), даже без «команды», а всего лишь клавиатурным сочетанием. если, конечно, ваша оболочка использует gnu/readline для редактирования командной строки. например, такая команда привяжет к клавиатурному сочетанию alt+o подстановку значения переменной $PWD (и слэша в конце — для удобства) в текущую позицию курсора: $ bind '"\eo": "$PWD/\e\C-e"' здесь \eo — это и есть alt+o (а, например, \C-o — это ctrl+o). чтобы данная привязка создавалась автоматически в каждой сессии оболочки, можно добавить приведённую команду, например, в стартовый скрипт используемой оболочки — ~/.${SHELL##*/}rc. а ещё лучше — добавить строку, которая в примере выше передавалась встроенной команде оболочки bind, прямо в файл ~/.inputrc (конф. файл, используемый gnu/readline-ом): "\eo": "$PWD/\e\C-e" навеяно этим ответом: Bash: call script with customized keyboard shortcuts?

Комментариев нет:

Отправить комментарий