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

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

<命令>

dir> <command> file.txt  

应该打印

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

当前回答

find $PWD -type f | grep "filename"

or

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

其他回答

对于Mac OS,如果你只是想在查找器中获取文件的路径,控制单击该文件,并向下滚动到底部的“服务”。你有很多选择,包括“复制路径”和“复制完整路径”。单击其中一个将路径放到剪贴板上。

我很惊讶居然没人提到定位。

如果已经安装了定位包,甚至不需要在感兴趣的文件所在的目录中。

假设我正在寻找一个setenv.sh脚本的完整路径名。这就是找到它的方法。

$ locate setenv.sh
/home/davis/progs/devpost_aws_disaster_response/python/setenv.sh
/home/davis/progs/devpost_aws_disaster_response/webapp/setenv.sh
/home/davis/progs/eb_testy/setenv.sh

注意,在这种情况下它会找到三个脚本,但是如果我只需要一个I 会这样做:

$ locate *testy*setenv.sh
/home/davis/progs/eb_testy/setenv.sh

我猜你用的是Linux。

我在coreutils 8.15中找到了一个名为realpath的实用程序。

realpath -s file.txt
/data/ail_data/transformed_binaries/coreutils/test_folder_realpath/file.txt

由于问题是关于如何获取文件的完整/绝对路径,而不是关于如何获取符号链接的目标,请使用-s或——no-symlinks,这意味着不要展开符号链接。

根据@styrofoam-fly和@arch-standton注释,realpath本身并不检查文件是否存在,为了解决这个问题,添加e参数:realpath -e file

这对我来说很有效。它不依赖于文件系统(取决于需要的利弊),所以它会很快;并且,它应该可以移植到大多数*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} \'
}

在类似的场景中,我从其他位置启动cshell脚本。为了设置脚本的正确绝对路径,让它只在指定的目录中运行,我使用了以下代码:

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

$0存储脚本执行的确切字符串。

例如,如果脚本像这样启动:$> ../../test/test.csh, $script_dir将包含/home/abc/sandbox/v1/