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

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

<命令>

dir> <command> file.txt  

应该打印

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

当前回答

我发现最简单的方法是:

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

这对我来说很有效。

其他回答

我喜欢已经给出的许多答案,但我发现这真的很有用,特别是在脚本中获得文件的完整路径,包括遵循符号链接和相对引用,例如。和. .

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

它将返回从根路径开始的文件的完整路径。 这可以在脚本中使用,以便脚本知道它是从哪个路径运行的,这对于可能位于机器上任何位置的存储库克隆非常有用。

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

然后我可以在我的脚本中使用${basePath}变量来直接引用其他脚本。

希望这能有所帮助,

Dave

对于Mac OS X,我替换了操作系统附带的实用程序,用更新版本的coreutils替换了它们。这允许你在Mac上访问像readlink -f(文件的绝对路径)和realpath(目录的绝对路径)这样的工具。

Homebrew版本在命令名前附加了一个“G”(GNU工具)——所以等价的是greadlink -f FILE和grealpath DIRECTORY。

关于如何通过Homebrew在Mac OS X上安装coreutils/GNU Tools的说明可以在这篇StackExchange文章中找到。

注意:readlink -f和realpath命令对于非mac Unix用户应该是开箱即用的。

这可以简化

 ls <file_name> | pwd

这将适用于文件和文件夹:

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

我发现最简单的方法是:

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

这对我来说很有效。