有没有办法以编程方式压缩路径的 ../.. 部分?

有没有办法以编程方式压缩路径的 ../.. 部分?

举例来说,我在脚本中有以下类型的文件路径:

/path/to/some/file/../../file1.txt

是否有一个我可以调用的命令,例如readlink将该路径转换为其实际的物理形式:

/path/to/file1.txt

答案1

啊,问得太快了。在 Linux 上,答案是readlink-mswitch 一起使用:

$ 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 之前的古董)。

相关内容