举例来说,我在脚本中有以下类型的文件路径:
/path/to/some/file/../../file1.txt
是否有一个我可以调用的命令,例如readlink
将该路径转换为其实际的物理形式:
/path/to/file1.txt
答案1
啊,问得太快了。在 Linux 上,答案是readlink
与-m
switch 一起使用:
$ readlink -m /home/saml/web/../web_login_form_examples/basic-php-parsing.zip
/home/saml/web_login_form_examples/basic-php-parsing.zip
readlink 手册页
-m, --canonicalize-missing
canonicalize by following every symlink in every component of the
given name recursively, without requirements on components existence
答案2
如果您对符号链接不感兴趣file.txt
,并且您假设该文件存在:
filename=/path/to/file1.txt
canonical_directory=$(cd -- "$(dirname -- "$filename")/" && pwd -P)
echo "$canonical_directory/${filename##*/}"
这是完全可移植的(除了一些 POSIX 之前的古董)。