システム上または特定のディレクトリからリンクされたすべてのファイルのリストを取得するにはどうすればよいですか。以前はリンクを作成していましたが、時間の経過とともに管理できなくなりました。ディレクトリからのそのようなすべてのリンクのリストが必要です。誰か助けてもらえますか?
4 に答える
シンボリックリンクを見つけるのは簡単です:
% find . -type l
問題のディレクトリのサブディレクトリにもサブディレクトリがある場合、それらはハードリンクの数を増やすため、ハードリンクを見つけるのは難しいです。これが、UNIXでサブディレクトリが親にリンクされる方法です(..
各サブディレクトリのエントリです)。
リンクされたファイル(ディレクトリではなく)のみを検索する場合は、次のように機能します。
% find . -type f \! -links 1
これが機能するのは、ハードリンクがあるファイルのリンク数が1を超え、リンクされていないファイルのリンク数が1であるためです。したがって、このコマンドは、リンク数が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
て、特定のファイルへのすべてのハードリンクとソフトリンクを検索します。