Как вы можете быстро получить полный путь к файлу для использования в терминале?

47

Как вы можете быстро получить полный путь к файлу для использования в терминале?

Оливье Лалонд
источник

Ответы:

44
readlink -f foo.bar

или (установите его первым)

realpath foo.bar
spennig
источник
Этот ответ более точен, чем принятый.
Кунок
Для полной папки: ls | xargs realpath.
Пабло А
1
Недостатком readlinkявляется то, что он будет работать, даже если файл не существует. Это может увековечить ошибки очень странными способами.
GregRos
32

Просто перетащите файл в терминал.

Оливье Лалонд
источник
1
Я помещаю это сюда, чтобы не забыть, будем надеяться, что это поможет некоторым из вас: D
Оливье Лалонд
Возвращает путь с префиксом «smb: //» для смонтированных общих ресурсов SMB вместо фактического смонтированного пути.
Купиакос
@Kupiakos: для меня gnome-терминал с радостью переводит путь к удаленному файлу'/home/alexcohn/.gvfs/…'
Алекс Кон
11

Все хорошие ответы; Вот подсказка для другой ситуации.

Если вы просматриваете свои файлы с помощью nautilus и хотите получить полный путь к текущему каталогу, нажмите CTRL+L. При этом кнопки хлебных крошек временно возвращаются в адресную строку старого стиля, что позволяет копировать путь.

Sicco
источник
... но это все еще smb://стиль, поэтому его нельзя использовать в терминале.
Алекс Кон
Интересно; в моей системе (Ubuntu 13.10) я не получаю smb://путь в стиле.
Sicco
Именно то, что я искал, я имею в виду, что терминал - это отличное место для ls, но иногда вы работаете в папках с файлами: ')
edencorbin
3

Если это исполняемый файл, то выполните (в терминале):

$ which your_executable

Например: $ which ls

perseo22
источник
Это ответ, который я искал
Шарджил Ахмед
1

В дополнение к перетаскиванию иконки, есть несколько способов получить полный путь без nautilus (или thunar, konqueror и др.). Затем вы должны были бы трижды щелкнуть или щелкнуть-перетащить и скопировать, потенциально сохранив это в вашем менеджере буфера обмена *, и вставить его в нужное место.
(пасти, клиппер, глипп, глипер, анамнез)

  • Вы можете использовать findв каталоге над вашим файлом. (Если вы не знаете, где он находится, начните с того места, куда вас уронит оболочка, [обычно] в верхней части вашего домашнего каталога.)
    find . | egrep filename

  • Вы можете использовать, locateчтобы получить имя файла. (Запустите, sudo updatedbесли это не было сделано недавно.)

Более реалистичным примером использования find было бы что-то вроде:

$ find | egrep askubuntu | grep txt
./askubuntu-temp.txt
./drDocuments/web/meta.askubuntu.txt
./other/stuff/askubuntu.txt.iteration.1
./other/stuff/askubuntu.txt.iteration.2
[...]

Вырезать те, которые вам не нравятся, например:

find | egrep askubuntu | grep txt | egrep -v iteration
find | egrep askubuntu | grep txt | egrep -v 'iteration|meta|other'

locate используется почти так же, хотя grep часто более необходим:

locate myfile | egrep home | egrep -v 'mozilla|cache|local|bin|\.pyc|test' | grep \.py

Это не самый эффективный способ напечатать это, но обычно, если я потерял файл, я делаю это итеративно, добавляя предложения grep.

belacqua
источник
1

Легко сделать в Python, используя os.realpath()функцию:

$ python -c 'import os,sys;print(os.path.realpath(sys.argv[1]))' ./VirtualBox\ VMs/                                      
/mnt/HDD/VirtualBox VMs

Из соответствующего ответа вы также можете использоватьreadlink

$ readlink -e ./out.txt                                                                                                  
/home/username/out.txt
Сергей Колодяжный
источник
0

Если вы просто скопируете файл в Nautilus, то будет скопирован полный путь.
Затем вставьте его в терминал. Просто вставив, вы получите:

file:///home/juan/2017/agenda20170101.html

Если вы щелкните правой кнопкой мыши и выберите «Вставить имена файлов», то вы получите:

'/home/juan/2017/agenda20170101.html'

с кавычками, как показано.
Это отличается от Windows, которая копирует содержимое файла вместо его имени.

Хуан Ланус
источник