回答:
絶対リンクを見つけるには、サポートされている場合はfindの-lnameオプションを使用できますfind(少なくともGNU findで、FreeBSDとmacOS で利用可能です)。
find . -type l -lname '/*'
これはfind、シンボリックリンクであり、/*シェルグロビングを使用して内容(ターゲット)が一致するファイルの名前を出力するように要求します。
厳密に言うと、POSIXは絶対パス名が1つ/または3つ以上で始まることを指定してい/ます。それに合わせて、あなたは使うことができます
find . -lname '/*' ! -lname '//*' -o -lname '///*'
// foo / barが/ foo / barと異なるのはどのシステムですか?詳細については、
(GNU固有であることを指摘してくれたSato Katsuraに感謝します。少なくともFreeBSDとmacOSでも実際に利用可能であると述べてfd0に感謝し、POSIX絶対パス名の定義を提示してくれたStéphaneChazelasに感謝します。)-lname
find ./ -t l -exec ls -l {} \;これは安全な代替手段になるはずです。その出力を解析して、必要なことを何でも行うのは簡単です。
lsですか?...
このsymlinksユーティリティは便利です。
$ symlinks -r .
other_fs: /home/chazelas/test/bin -> /bin
dangling: /home/chazelas/test/DIR/foo -> foo
dangling: /home/chazelas/test/blah -> not-here
absolute: /home/chazelas/test/chazelas -> /home/chazelas
そしてあなたのためにリンクを修正することができます。ここで-tそれが何をするかを伝えるために:
$ symlinks -rct .
other_fs: /home/chazelas/test/bin -> /bin
dangling: /home/chazelas/test/DIR/foo -> foo
dangling: /home/chazelas/test/blah -> not-here
absolute: /home/chazelas/test/chazelas -> /home/chazelas
changed: /home/chazelas/test/chazelas -> ../../chazelas