web-dev-qa-db-ja.com

UNIX上のファイルへのすべてのシンボリックリンクとハードリンクを検索する

UNIXファイルシステムに特定のファイルがある場合、bashを使用して、シンボリックとハードの両方で、そのファイルへのすべてのリンクを検索する方法はありますか?それぞれに異なるコマンドが必要な場合、それらは何ですか?

9
colin.t.welch

GNU findでこれを試してください:

find /start/dir -L -samefile /file/to/check -exec ls -li {} \;

出力例:

1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x1
1234704 -rw-r--r-- 2 user1 user1 1134 2009-09-11 11:12 ./x2
1234983 lrwxrwxrwx 1 user1 user1 2 2009-10-31 16:56 ./testx -> x1
2345059 lrwxrwxrwx 1 user2 user2 2 2010-01-03 16:17 ./x3 -> x1

-lsの代わりに-execを使用することもできますが、個々のファイルの代わりに、ターゲットファイルのiノードおよびその他の情報が表示されます。

GNUを持っていない場合は、次のことができます。

find / -inum "$(ls -i /file/to/check | cut -d ' ' -f 1)"

ただし、シンボリックリンクでは機能しません。

2
Ollie Saunders