たとえば、私のスクリプトには次の種類のファイルパスがあります。
/path/to/some/file/../../file1.txt
readlink
そのパスを実際の物理形式に変換するために呼び出すことができるコマンドはありますか?
/path/to/file1.txt
答え1
ああ、あまりにも急な質問ですね。 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
答え2
シンボリックリンクに興味がなく、file.txt
ファイルが存在すると仮定する場合:
filename=/path/to/file1.txt
canonical_directory=$(cd -- "$(dirname -- "$filename")/" && pwd -P)
echo "$canonical_directory/${filename##*/}"
これは完全に移植可能です(一部のPOSIX以前の好奇心を除いて)。