Linuxの場合は、-xtype
オプションで探せるそうです。
参照→リンク切れのシンボリックリンクを探す方法
FreeBSDの場合は、以下のコマンドで探せます。
find -L 検索対象ディレクトリ -type l
解説
まずシンボリックリンクを探す
探したいものはシンボリックリンクなので、-type l
という検索条件を使います。
ただ、この条件だけでは、リンク参照先の有無に関わらず、すべてのシンボリックリンクが出力されます。
リンク参照先の情報を読むようにする
デフォルトでは、リンク自体の情報を読む
何もオプションを指定しないときは、find
は次のように動作します。
-P 各シンボリックリンクのために返されたファイル情報とファイルタイプ
(stat(2) 参照) は、リンク自体のものとなります。これは、デフォルト
です。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=find&dir=jpman-11.0.2%2Fman§=0
より
そのため、-type l
という検索条件で、すべてのシンボリックリンクが出力されるのです。
リンク参照先の情報を読むオプション
-L
オプションをつけると、find
の動作が次のように変わります。
-L 各シンボリックリンクのために返されたファイル情報とファイルタイプ
(stat(2) 参照) は、リンク自体ではなく、リンクによって参照される
ファイルのものとなります。参照されたファイルが存在しないなら、
ファイル情報とタイプは、リンク自体のものとなります。
このオプションは、推奨されない -follow プライマリと同等です。
なかなかむつかしいですね。。。
-L
オプションを付けると、リンクの参照先が存在するときは参照先の情報を読み込み、存在しないときはリンク自体の情報を読みます。
したがって、-type l
という条件で参照先が存在しないシンボリックリンクを検索できるのです。
findの挙動まとめ
findが検索条件に使う情報をまとめるとこんな感じです。
リンク先が…… | 存在する | 存在しない |
---|---|---|
-P オプション指定時(デフォルト) |
シンボリックリンク自体の情報 | シンボリックリンク自体の情報 |
-L オプション指定時 |
リンク参照先の情報 | シンボリックリンク自体の情報 |
落穂拾い
リンク参照先がシンボリックリンクだったら……
リンクついえるところまで辿ってくれるみたいです。