壊れたリンクのみのリストを取得するコマンドを見つけることができましたが、「機能している」シンボリックリンクは見つかりませんでした
find -H mydir -type l
どうすれば反対のことができますか?
私がこれらのファイルを持っている場合mydir
:
foo
bar
bob
carol
それらがすべてシンボリックリンクであるが、bob
存在しないファイルを指している場合、私は見たい
foo
bar
carol
使用find(1)
して
$ find . -type l -not -xtype l
このコマンドは、フォロー後にリンクでなくなるリンク、つまり途切れのないリンクを検索します。(通常または特殊なファイル、ディレクトリなどを指している場合があることに注意してください。-xtype f
代わりに、-not -xtype l
通常のファイルを指しているリンクのみを検索してください。)
$ find . -type l -not -xtype l -ls
彼らが指している場所を報告します。
インタラクティブシェルの使用法で同様の質問に頻繁に遭遇する場合、zshはあなたの友達です:
% echo **/*(@^-@)
これは同じ考え方に従います。Glob修飾子 @
はリンクに制限され、 「フォローが有効になっている場合はリンク()では^-@
ない()」を意味します( )。^
@
-
(Pythonで壊れたリンクを見つける方法については、この投稿も参照してください。実際、これはLinuxですべての言語で実行できることを示しています。 「壊れたリンクを見つける方法」の関連質問に対する完全な回答については、このブログ投稿を参照してください。)
これにより、実際に存在する通常のファイルへのリンクであるシンボリックリンクのみが表示されます(LINUX)。
find DIR1 -type l -xtype f -ls
xtypeオプションの「find」(LINUX)ドキュメントから:「シンボリックリンクの場合、-xtypeは-typeがチェックしないファイルのタイプをチェックします」
このオプションは、実際に存在するディレクトリへのシンボリックリンクを表示します。
find DIR1 -type l -xtype d -ls
1つのbashソリューション:
find . -type l -print | while read src
do
[[ -e "$src" ]] && echo $src
done
したがって、すべてのシンボリックリンクを見つけて、存在するかどうかを確認します(存在する場合)->エコーします