回答:
絶対リンクを見つけるには、サポートされている場合は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