[Linux] Как получить полный путь к файлу?


Answers

Я полагаю, вы используете Linux.

Я нашел утилиту под названием realpath в coreutils 8.15.

realpath realpath
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/realpath
Question

Есть ли простой способ распечатать полный путь file.txt ?

file.txt = /nfs/an/disks/jj/home/dir/file.txt

<command>

dir> <command> file.txt  

должен печатать

/nfs/an/disks/jj/home/dir/file.txt



echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")

Это объяснение того, что происходит в ответе @ ZeRemz:

  1. Этот скрипт получает относительный путь как аргумент "$1"
  2. Затем мы получаем часть dirname этого пути (вы можете передать любой файл или файл в этот скрипт): dirname "$1"
  3. Тогда мы cd "$(dirname "$1") в этот относительный dir
  4. && pwd -P и получить абсолютный путь для него. -P избегает всех символических ссылок
  5. После этого мы добавляем basename в абсолютный путь: $(basename "$1")
  6. В качестве последнего шага мы echo его



Как правило:

find `pwd` | grep <filename>

Альтернативно, только для текущей папки:

find `pwd` -maxdepth 1 | grep <filename>



Я знаю, что есть более простой способ, чтобы это, но штопали, если я могу найти его ...

jcomeau@intrepid:~$ python -c 'import os; print(os.path.abspath("cat.wav"))'
/home/jcomeau/cat.wav
jcomeau@intrepid:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav



Если вы находитесь в том же каталоге, что и файл:

ls "`pwd`/file.txt"

Замените file.txt вашим целевым именем.




Помимо «readlink -f», другая обычно используемая команда:

$find  /the/long/path/but/I/can/use/TAB/to/auto/it/to/ -name myfile
/the/long/path/but/I/can/use/TAB/to/auto/it/to/myfile
$

Это также дает полный путь и имя файла на консоли

Вне темы: этот метод просто дает относительные ссылки, а не абсолютные. Команда readlink -f является правильной.




В окнах вы можете

Hold shift and right click on a file which gives you can option called "Copy as Path"

Это скопирует полный путь файла в буфер обмена.

В Linux вы можете использовать: -

realpath yourfile чтобы получить полный путь к файлу, как это было предложено многими.




find / -samefile file.txt -print

Найдите все ссылки на файл с тем же номером inode, что и file.txt

добавление флага -xdev позволит избежать пересечения границ устройств («точки монтирования»). (Но это, вероятно, ничего не может найти, если find не начинается в каталоге на том же устройстве, что и file.txt )

Обратите внимание, что find может сообщать о нескольких путях для одного объекта файловой системы, потому что Inode может быть связан более чем с одной записью каталога, возможно даже с использованием разных имен. Например:

find /bin -samefile /bin/gunzip -ls

Вывод:

12845178    4 -rwxr-xr-x   2 root     root         2251 feb  9  2012 /bin/uncompress
12845178    4 -rwxr-xr-x   2 root     root         2251 feb  9  2012 /bin/gunzip



Это даст вам абсолютный путь к файлу:

find / -name file.txt 



Еще одна утилита Linux, которая выполняет эту работу:

fname <file>



В аналогичном сценарии я запускаю сценарий cshell из другого места. Для установки правильного абсолютного пути скрипта, чтобы он выполнялся только в указанной директории, я использую следующий код:

set script_dir = `pwd`/`dirname $0`

$0 хранит точную строку, как выполнялся скрипт.

Например, если скрипт был запущен следующим образом: $> ../../test/test.csh , $script_dir будет содержать /home/abc/sandbox/v1/../../test




самый простой способ найти

for i in `ls`; do echo "`pwd`/$i"; done

это хорошо работает для меня




Работает на Mac, Linux, * nix:

Это даст вам цитату из всех файлов в текущем каталоге:

ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'

Результат этого может быть легко скопирован в список python или любую подобную структуру данных.




В Mac OSX выполните следующие действия:

  1. cd в каталог целевого файла.
  2. Введите одну из следующих команд терминала.
Терминал
ls "`pwd`/file.txt"
echo $(pwd)/file.txt
  1. Замените file.txt своим фактическим именем файла.
  2. Нажмите Enter