是否有一种简单的方法可以打印file.txt的完整路径?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
<命令>
dir> <command> file.txt
应该打印
/nfs/an/disks/jj/home/dir/file.txt
是否有一种简单的方法可以打印file.txt的完整路径?
file.txt = /nfs/an/disks/jj/home/dir/file.txt
<命令>
dir> <command> file.txt
应该打印
/nfs/an/disks/jj/home/dir/file.txt
当前回答
echo $(cd $(dirname "$1") && pwd -P)/$(basename "$1")
这是对@ZeRemz的答案的解释:
这个脚本获取相对路径作为参数"$1" 然后我们得到该路径的dirname部分(你可以将dir或file传递给这个脚本): 然后将“$(dirname“$1”)cd到这个相对目录中 && pwd -P并获取它的绝对路径。-P选项将避免所有符号链接 在此之后,我们将basename附加到绝对路径: 作为最后一步,我们重复它
其他回答
使用指向:
readlink -f file.txt
这将为您提供文件的绝对路径:
find / -name file.txt
这对我来说很有效。它不依赖于文件系统(取决于需要的利弊),所以它会很快;并且,它应该可以移植到大多数*NIX。它假设传递的字符串确实是相对于PWD,而不是其他目录。
function abspath () {
echo $1 | awk '\
# Root parent directory refs to the PWD for replacement below
/^\.\.\// { sub("^", "./") } \
# Replace the symbolic PWD refs with the absolute PWD \
/^\.\// { sub("^\.", ENVIRON["PWD"])} \
# Print absolute paths \
/^\// {print} \'
}
在Windows上:
按住Shift键,在Windows资源管理器中右键单击一个文件,会出现一个名为“复制为路径”的选项。 这将复制文件的完整路径到剪贴板。
在Linux上:
您可以使用realpath yourfile命令来获得其他人建议的文件的完整路径。
find / -samefile file.txt -print
会发现所有链接的文件与相同的索引节点号为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