GNU find
の使用 、これはファイルにハードリンクまたはシンボリックリンクされているファイルを見つけます:
find -L /dir/to/start -samefile /tmp/orig.file
このためのコマンドは見たことがありません。ターゲット ファイルには、どのソース ファイルがそれを指しているかについての情報が含まれていないため、簡単な作業ではありません。
これは「ハード」リンクに似ていますが、少なくともそれらは常に同じファイル システム上にあるため、find -inode
を実行できます。 それらをリストします。ソフト リンクはファイル システムをまたがる可能性があるため、より問題になります。
あなたがしなければならないことは、基本的に ls -al
を実行することだと思います 階層全体のすべてのファイルで grep
を使用します -> /path/to/target/file
を検索するには .
たとえば、これは私が自分のシステムで実行したものです (読みやすいようにフォーマットされています - これらの最後の 2 行は実際には one にあります) 実際の出力の行):
pax$ find / -exec ls -ald {} ';' 2>/dev/null | grep '\-> /usr/share/applications'
lrwxrwxrwx 1 pax pax 23 2010-06-12 14:56 /home/pax/applications_usr_share
-> /usr/share/applications
Gordon Davisson のコメントに触発されました。これは別の回答に似ていますが、exec を使用して目的の結果が得られました。元のファイルがどこにあるかを知らなくても、シンボリック リンクを見つけられるものが必要でした。
find / -type l -exec ls -al {} \; | grep -i "all_or_part_of_original_name"