web-dev-qa-db-ja.com

循環シンボリックリンクを見つけるにはどうすればよいですか?

HP-UXシステムで作業していますが、循環シンボリックリンクがあるかどうかを確認したいと思います。

これまでのところ、私はコマンドを使用しています:

ls -lrt  `find ./ -follow -type l`

しかし、結果として現在のディレクトリでls -lrtを実行しているだけです。

システム内のすべての循環シンボリックリンクを見つけるには、どのコマンドを使用すればよいですか?

12
Vladimir

GNU findのマンページは、すべてのPOSIX findがファイルシステムループを検出し、これらの場合にエラーメッセージを出力するはずであると述べています。私はテストしました

find . -follow -printf ""

on GNU find、これは./a -> ./bおよび./b -> ./aという形式のループを見つけることができ、エラーを出力しました

find: `./a': Too many levels of symbolic links
find: `./b': Too many levels of symbolic links

(これはa->b->c->aでも機能しました)

同様に、./foo/x -> ..および./foo/a -> ./bar + ./bar/b -> ./fooの形式のループはエラーを出力しました

find: File system loop detected; `./foo/a/b' is part of the same file system loop as `./foo'.
find: File system loop detected; `./bar/b/a' is part of the same file system loop as `./bar'.
find: File system loop detected; `./foo/x' is part of the same file system loop as `.'.

読み取る以外の出力で何かを実行したい場合は、それをstderrからstdoutにリダイレクトし、エラーメッセージを解析できるスクリプトにパイプする必要があります。

18
DerfK