Shell

有沒有辦法以程式方式壓縮 ../.. 路徑的一部分?

  • September 12, 2018

例如,我在腳本中有這些類型的文件路徑:

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

有沒有我可以呼叫的命令,例如可以readlink將此路徑轉換為其實際物理形式:

/path/to/file1.txt

啊,問得太快了。在 Linux 上,答案是readlink-m交換機一起使用:

$ readlink -m /home/saml/web/../web_login_form_examples/basic-php-parsing.zip
/home/saml/web_login_form_examples/basic-php-parsing.zip

閱讀連結手冊頁

-m, --canonicalize-missing
      canonicalize by following every symlink in every component of the
      given name recursively, without requirements on components existence

如果您對符號連結不感興趣file.txt,並且假設該文件存在:

filename=/path/to/file1.txt
canonical_directory=$(cd -- "$(dirname -- "$filename")/" && pwd -P)
echo "$canonical_directory/${filename##*/}"

這是完全可移植的(一些 pre-POSIX 古董除外)。

引用自:https://unix.stackexchange.com/questions/91092