/var/opt/foo
で作成されたシンボリックリンクln -fs /path/to/target/dir foo
がある場合。リンクのみを表示するスクリプトで/path/to/target/dir
を取得するにはどうすればよいですか?
スクリプトで達成したいのは、rm -rf /path/to/target/dir
を実行する前のln -fs /path/to/another/dir foo
です。
link=/var/opt/foo
target=$(readlink "$link")
$target
は、ファイルシステムに格納されていたとおり、リンクのターゲットになりました。
ただし、シンボリックリンクは相対パスにすることができるため、通常の使用にはこれが適しています。
target=$(readlink -f "$link")
これはGNU Coreutilsからのreadlink
を使用することに注意してください。これはBSDおよび他のシステムには存在しない可能性があります。
編集:readlink -f
リンクターゲットが存在する限り、BSDで動作します。 realpath
は、同様の方法で機能する、BSD専用の別のツールです。
1つの方法は (私はより良いバージョンを望んでいます)
olddir=$(pwd)
cd /var/opt/foo
deleteme=$(pwd)
cd $olddir
rm -rf "$olddir"