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

Есть ли простой способ распечатать полный путь 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

Ответ 1

Используйте readlink:

readlink -f file.txt

Ответ 2

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

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

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

Ответ 3

Следующее обычно выполняет трюк:

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

Ответ 4

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

[email protected]:~$ python -c 'import os; print(os.path.abspath("cat.wav"))'
/home/jcomeau/cat.wav

[email protected]:~$ ls $PWD/cat.wav
/home/jcomeau/cat.wav

Ответ 5

find $PWD -type f | grep "filename"

или

find $PWD -type f -name "*filename*"

Ответ 6

Вы можете использовать fpn (полное имя пути) script:

% pwd
/Users/adamatan/bins/scripts/fpn

% ls
LICENSE   README.md fpn.py

% fpn *
/Users/adamatan/bins/scripts/fpn/LICENSE
/Users/adamatan/bins/scripts/fpn/README.md
/Users/adamatan/bins/scripts/fpn/fpn.py

fpn не является стандартным пакетом Linux, но свободный и открытый проект github, и вы может установить его через минуту.

Ответ 7

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

ls "`pwd`/file.txt"

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

Ответ 8

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

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

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

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

Ответ 9

В Mac OS X я заменил утилиты, поставляемые с операционной системой, и заменил их более новой версией ядра. Это позволяет вам получить доступ к таким инструментам, как readlink -f (для абсолютного пути к файлам) и realpath (абсолютный путь к каталогам) на вашем Mac.

Версия Homebrew добавляет "G" (для инструментов GNU) перед именем команды, поэтому эквиваленты становятся greadlink -f FILE и grealpath DIRECTORY.

Инструкции по установке инструментов coreutils/GNU на Mac OS X через Homebrew можно найти в этой статье StackExchange.

Примечание. Команды readlink -f и realpath должны работать в автономном режиме для пользователей, не являющихся пользователями Mac Unix.

Ответ 10

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

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

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

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

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

Ответ 11

Вы можете сохранить это в своем "shell.rc" или просто положить в консоль

function absolute_path {echo "$ PWD/$1"; }

alias ap = "absolute_path"

пример:

ap somefile.txt

выводит

/home/user/somefile.txt

Ответ 12

find / -samefile file.txt -print

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

добавление флага -xdev позволит избежать find пересекать границы устройств ( "точки монтирования" ). (Но это, вероятно, ничего не может найти, если 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

Ответ 13

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

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

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

Ответ 14

Я знаю, что это старый вопрос сейчас, но просто чтобы добавить сюда информацию:

Команду Linux which можно использовать для поиска пути к файлу команды, т.е.

$ which ls
/bin/ls

Есть несколько предостережений; см. https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/.

Ответ 15

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

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

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

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

Ответ 16

fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}

Копирует текст в буфер обмена и отображает текст в окне терминала.

:)

(Я скопировал часть кода из другого ответа, но больше не могу найти ответ)

Ответ 17

Самый простой способ, который я нашел, -

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

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

Ответ 18

Это будет работать как для файла, так и для папки:

getAbsolutePath(){
    [[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } || 
    { cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}

Ответ 19

Обычно:

find `pwd` | grep <filename>

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

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

Ответ 20

Мне нравятся многие ответы, которые уже были даны, но я нашел это действительно полезным, особенно в script, чтобы получить полный путь к файлу, включая следующие символические ссылки и относительные ссылки, такие как . и ..

dirname `readlink -e relative/path/to/file`

который вернет полный путь к file с корневого пути вперед. Это можно использовать в script, чтобы script знал, к какому пути он запускается, что полезно в клон-хранилище, который может быть расположен где угодно на машине.

basePath=`dirname \`readlink -e $0\``

Затем я могу использовать переменную ${basePath} в моих скриптах, чтобы напрямую ссылаться на другие сценарии.

Надеюсь, что это поможет,

Dave

Ответ 21

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

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

Ответ 22

Другая утилита Linux, которая выполняет эту работу:

fname <file>

Ответ 23

Для Mac OS, если вы просто хотите получить путь к файлу в поисковом элементе, нажмите "Файл" и прокрутите вниз до "Услуги" внизу. Вы получаете много вариантов, включая "путь копирования" и "скопировать полный путь". Нажатие на один из них помещает путь в буфер обмена.

Ответ 24

Помимо "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 является правильной.

Ответ 25

ниже печатается абсолютный путь файла file.txt, который в этом примере должен находиться в текущем каталоге.

find file.txt

Предположим, что file.txt находится в домашнем каталоге пользователя foo. Все приведенные ниже команды эквивалентны, и все они вернут тот же файл /home/foo/file.txt в Linux или /Users/foo/file.txt в OS X:

find ~/file.txt
cd ~/
find file.txt
find ./file.txt

Ответ 26

Это работает как с Linux, так и с Mac OSX..

 echo $(pwd)$/$(ls file.txt)

Ответ 27

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

find / -name file.txt