基本的にLinux上の他のディレクトリまたはファイルのソフトリンクまたはハードリンクであるすべてのファイルを見つける方法は?

StackOverflow https://stackoverflow.com/questions/1810334

質問

システムまたは特定のディレクトリからすべてのリンクされたファイルのリストを取得するにはどうすればよいですか。以前はリンクを作成していましたが、時間とともに管理不能になりました。ディレクトリからそのようなすべてのリンクのリストが必要です。誰でも助けることができますか?

役に立ちましたか?

解決

シンボリックリンクの検索は簡単です:

% find . -type l

ハードリンクを見つけるのは難しいです。なぜなら、問題のディレクトリのサブディレクトリにもサブディレクトリがある場合、ハードリンクの数が増えるからです。これが、UNIXでサブディレクトリを親にリンクする方法です(各サブディレクトリの..エントリです)。

リンクされたファイル(ディレクトリではなく)のみを検索する場合、これは機能します:

% find . -type f \! -links 1

これは、行うファイルにハードリンクがあるため、リンクカウント<!> gt; 1、およびリンクされていないファイルはリンク数== 1であるため、このコマンドはリンク数<!> lt; <!> gt;のすべてのファイルを検索します。 1

別の方法として、findの新しいバージョンでは次を使用できます:

% find . -type f -links +1

これは上記と同じ理由で機能します。ただし、findの新しいバージョンでは、数字の代わりに+ nまたは-nを使用できます。これは、それぞれnより大きいかnより小さいかをテストすることと同等です。

他のヒント

find / -xdev -samefile filename

@ OP、GNU findがある場合、-printf "%n"を使用してハードリンクを検索できます。 例:

find /path -type f -printf "%f/%n/%i\n" | while IFS="/" read filename num_hlinks inum
do
 echo "Filename: $filename. Number of hard links: $num_hlinks, inode: $inum"
 # if 2 or more files have the same inode number, then they are hard links. 
 # you can therefore count how many $inum that are the same and determine those hard links, which 
 # you have to try doing yourself.
done

をご覧ください。ここに https://www.gnu.org/software/findutils /manual/html_node/find_html/Hard-Links.html または、Alnitakとamber_linuxの回答を組み合わせて find -L /where/to/search -samefile /some/link/to/file 特定のファイルへのすべてのハードリンクとソフトリンクを検索します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top