基本的にLinux上の他のディレクトリまたはファイルのソフトリンクまたはハードリンクであるすべてのファイルを見つける方法は?
質問
システムまたは特定のディレクトリからすべてのリンクされたファイルのリストを取得するにはどうすればよいですか。以前はリンクを作成していましたが、時間とともに管理不能になりました。ディレクトリからそのようなすべてのリンクのリストが必要です。誰でも助けることができますか?
解決
シンボリックリンクの検索は簡単です:
% 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
特定のファイルへのすべてのハードリンクとソフトリンクを検索します。