web-dev-qa-db-ja.com

リンクのターゲットへのフルパスを取得する方法

/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です。

13
Nifle
link=/var/opt/foo

target=$(readlink "$link")

$targetは、ファイルシステムに格納されていたとおり、リンクのターゲットになりました。

ただし、シンボリックリンクは相対パスにすることができるため、通常の使用にはこれが適しています。

target=$(readlink -f "$link")

これはGNU Coreutilsからのreadlinkを使用することに注意してください。これはBSDおよび他のシステムには存在しない可能性があります。

編集:readlink -fリンクターゲットが存在する限り、BSDで動作します。 realpathは、同様の方法で機能する、BSD専用の別のツールです。

30
user1686

1つの方法は (私はより良いバージョンを望んでいます)

olddir=$(pwd)
cd /var/opt/foo
deleteme=$(pwd)
cd $olddir
rm -rf "$olddir"
0
Nifle