Есть ли простой способ распечатать полный путь 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
Есть ли простой способ распечатать полный путь 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
Используйте readlink:
readlink -f file.txt
Я полагаю, вы используете Linux.
Я нашел утилиту под названием realpath
в coreutils 8.15.
realpath realpath
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/realpath
Следующее обычно выполняет трюк:
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
Я знаю, что проще, чем это, но штопает, если я могу найти его...
[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
find $PWD -type f | grep "filename"
или
find $PWD -type f -name "*filename*"
Вы можете использовать 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, и вы может установить его через минуту.
Если вы находитесь в том же каталоге, что и файл:
ls "`pwd`/file.txt"
Замените file.txt
целевым именем файла.
В аналогичном сценарии я запускаю cshell script из другого места. Для установки правильного абсолютного пути script, чтобы он выполнялся только в указанной директории, я использую следующий код:
set script_dir = `pwd`/`dirname $0`
$0
хранит точную строку, как был выполнен script.
Например, если script был запущен следующим образом: $> ../../test/test.csh
,
$script_dir
будет содержать /home/abc/sandbox/v1/../../test
В 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.
В окнах вы можете
Hold shift and right click on a file which gives you can option called "Copy as Path"
Это скопирует полный путь файла в буфер обмена.
realpath yourfile
, чтобы получить полный путь к файлу, как это было предложено многими.
Вы можете сохранить это в своем "shell.rc" или просто положить в консоль
function absolute_path {echo "$ PWD/$1"; }
alias ap = "absolute_path"
пример:
ap somefile.txt
выводит
/home/user/somefile.txt
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
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
Это объяснение того, что происходит в @ZeRemz answer:
"$1"
dirname "$1"
cd "$(dirname "$1")
в этот относительный dir&& pwd -P
и получить абсолютный путь для него. -P
опция избегает всех символических ссылок$(basename "$1")
echo
itЯ знаю, что это старый вопрос сейчас, но просто чтобы добавить сюда информацию:
Команду Linux which
можно использовать для поиска пути к файлу команды, т.е.
$ which ls
/bin/ls
Есть несколько предостережений; см. https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/.
Работает на Mac, Linux, * nix:
Это даст вам цитату из всех файлов в текущем каталоге:
ls | xargs -I {} echo "$(pwd -P)/{}" | xargs | sed 's/ /","/g'
Результат этого может быть легко скопирован в список python или любую подобную структуру данных.
fp () {
PHYS_DIR=`pwd -P`
RESULT=$PHYS_DIR/$1
echo $RESULT | pbcopy
echo $RESULT
}
Копирует текст в буфер обмена и отображает текст в окне терминала.
:)
(Я скопировал часть кода из другого ответа, но больше не могу найти ответ)
Самый простой способ, который я нашел, -
for i in `ls`; do echo "`pwd`/$i"; done
это хорошо работает для меня
Это будет работать как для файла, так и для папки:
getAbsolutePath(){
[[ -d $1 ]] && { cd "$1"; echo "$(pwd -P)"; } ||
{ cd "$(dirname "$1")" || exit 1; echo "$(pwd -P)/$(basename "$1")"; }
}
Обычно:
find `pwd` | grep <filename>
Альтернативно, только для текущей папки:
find `pwd` -maxdepth 1 | grep <filename>
Мне нравятся многие ответы, которые уже были даны, но я нашел это действительно полезным, особенно в script, чтобы получить полный путь к файлу, включая следующие символические ссылки и относительные ссылки, такие как .
и ..
dirname `readlink -e relative/path/to/file`
который вернет полный путь к file
с корневого пути вперед.
Это можно использовать в script, чтобы script знал, к какому пути он запускается, что полезно в клон-хранилище, который может быть расположен где угодно на машине.
basePath=`dirname \`readlink -e $0\``
Затем я могу использовать переменную ${basePath}
в моих скриптах, чтобы напрямую ссылаться на другие сценарии.
Надеюсь, что это поможет,
Dave
В Mac OSX выполните следующие действия:
cd
в каталог целевого файла.ls "`pwd`/file.txt"
echo $(pwd)/file.txt
file.txt
своим фактическим именем файла.Другая утилита Linux, которая выполняет эту работу:
fname <file>
Для Mac OS, если вы просто хотите получить путь к файлу в поисковом элементе, нажмите "Файл" и прокрутите вниз до "Услуги" внизу. Вы получаете много вариантов, включая "путь копирования" и "скопировать полный путь". Нажатие на один из них помещает путь в буфер обмена.
Помимо "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
является правильной.
ниже печатается абсолютный путь файла 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
Это работает как с Linux, так и с Mac OSX..
echo $(pwd)$/$(ls file.txt)
Это даст вам абсолютный путь к файлу:
find / -name file.txt