如何获取文件的完整路径?

Jea*_*ean 669 unix linux file path

有没有一种简单的方法可以打印完整的路径file.txt

file.txt = /nfs/an/disks/jj/home/dir/file.txt
Run Code Online (Sandbox Code Playgroud)

<command>

dir> <command> file.txt  
Run Code Online (Sandbox Code Playgroud)

应该打印

/nfs/an/disks/jj/home/dir/file.txt
Run Code Online (Sandbox Code Playgroud)

fil*_*mor 1092

使用readlink:

readlink -f file.txt
Run Code Online (Sandbox Code Playgroud)

  • 在MAC:安装自制软件然后`brew install coreutils`然后`greadlink -f file.txt` (33认同)
  • 这就是'-f'的用途. (29认同)
  • 请参阅http://stackoverflow.com/questions/1055671/how-can-i-get-the-behavior-of-gnus-readlink-f-on-a-mac (10认同)
  • @ J0hnG4lt:那是因为你用自制软件安装了coreutils并将你的PATH改为指向未加前缀的二进制文件.安装coreutils,单独使用PATH,并使用"greadlink"也可以. (10认同)
  • 来自 `readlink` 的手册页:注意 `realpath` 是用于规范化功能的首选命令。 (6认同)
  • 刚刚在10.9.2上测试,工作正常.readlink/usr/local/opt/coreutils/libexec/gnubin/readlink readlink --version readlink(GNU coreutils)8.22 (5认同)
  • 警告:如果参数是符号链接,这将打印符号链接的目标。所以这个解决方案不适用于符号链接。ZeRemz 的答案有效 (3认同)
  • 在 mas osx 上,它返回 -f 是非法的,建议使用 -n 代替,但什么也没返回。 (2认同)

lll*_*lll 187

我想你正在使用Linux.

我发现了一个名为realpathcoreutils 8.15 的实用工具.

realpath file.txt
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt
Run Code Online (Sandbox Code Playgroud)

根据@ styrofoam-fly和@ arch-standton的评论,realpath单独不检查文件是否存在,解决此问题添加e参数:realpath -e file

  • `realpath` 于 2011 年底提交给 coreutils 存储库,版本 8.15 于 2012 年 1 月完成,我在 2011 年 3 月回答了这个问题(使用 `readlink` 建议):) (2认同)
  • realpath不会检查文件是否存在,它只是解析路径。要求不存在的文件的完整路径会导致错误。 (2认同)
  • 如果参数不存在,@styrofoamfly`realpath -e`将输出错误。 (2认同)
  • 这比 readlink 更好,因为您可以获得文件和文件夹的完整路径! (2认同)
  • 添加“-s”选项以不扩展符号链接。 (2认同)

ZeR*_*emz 75

以下通常可以解决问题:

 echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
Run Code Online (Sandbox Code Playgroud)

  • @SopalajodeArrierez因为如果文件是符号链接,`readlink`不起作用,它将显示符号链接的目标而不是符号链接本身. (7认同)
  • 我喜欢这个,因为 `readlink` 将我带回生成符号链接的父目录,但这会忽略它。 (2认同)
  • 我认为这应该是公认的答案,因为它的可移植性。 (2认同)

jco*_*ctx 31

知道这有一个更简单的方法,但是如果我能找到它就会变得愚蠢......

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


小智 24

find $PWD -type f | grep "filename"
Run Code Online (Sandbox Code Playgroud)

要么

find $PWD -type f -name "*filename*"
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 12

如果您与文件位于同一目录中:

ls "`pwd`/file.txt"
Run Code Online (Sandbox Code Playgroud)

替换file.txt为目标文件名.

  • 你也可以做`echo $(pwd)/ file.txt` (8认同)

Nat*_*hat 10

在Windows中你可以: -

  • 按住shift并右键单击一个文件,该文件可以调用选项 "Copy as Path"

    这会将文件的完整路径复制到剪贴板.

在Linux中,您可以使用以下命令: -

  • realpath yourfile 按照许多人的建议获取文件的完整路径.


Ada*_*tan 5

您可以使用fpn(完整路径名)脚本:

% 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
Run Code Online (Sandbox Code Playgroud)

fpn不是一个标准的 Linux 包,但它是一个免费和开放的 github 项目,你可以在一分钟内设置它


Lor*_*Cat 5

我知道这是一个古老的问题,但仅在此处添加信息:

Linux命令which可用于查找命令文件的文件路径,即

$ which ls
/bin/ls
Run Code Online (Sandbox Code Playgroud)

有一些注意事项;请参阅https://www.cyberciti.biz/faq/how-do-i-find-the-path-to-a-command-file/

  • 这个答案太具体了,OP并不是要查找命令。 (4认同)