2つのディレクトリ間のすべてのハードリンクファイルを見つける

2つのディレクトリ間のすべてのハードリンクファイルを見つける

複数のディレクトリにあるファイルへのハードリンクがあるかどうかはどうすればわかりますか?つまり、複数のディレクトリにあるファイルは同じファイルを参照しますか?

〜のように特定のファイルへのすべてのハードリンクを見つける方法は? [コピー]そして同じinode番号を持つすべてのファイルを一覧表示しますか?。しかし、検索する方法を知りたいです。どのハードリンクファイル異なるディレクトリ間

答え1

find2つ以上のリンクがあるディレクトリ内のすべてのファイルのinode番号を一覧表示し、結果を並べ替え、同じinodeが複数回表示される行を抽出できます。

これらのディレクトリは同じファイルシステムになければなりません。

find dir1 dir2 ... -xdev -type f -links +1 -printf '%i %p\n' |
sort -n -k1,1 |
awk '{   same = ($1==last)
         if(!same)save = $0
         else{ if(save!=""){ print save; save = "" }
                print 
         }
         last = $1
}'

このコードはファイルとそのinodeを印刷します。

108743 /tmp/a1
108743 /tmp/a2-hardlink-to-a1

使用できない場合にfind使用されますls -i1

答え2

このコマンドは、そのディレクトリの下のファイルに関連付けられているすべてのファイルをfind印刷する必要があります。./b./a

find ./a -type f -exec find ./b -samefile {} -printf "%p hard link to {}" \;

与えられたファイルパスとinode番号の例

$ find -type f -printf '%p:%i\n' | sort | column -t -s:
./a/f  12977541
./b/f  12977577  # unique file
./c/f  12977541  # points to same file as path ./a/f
#file  inode

ディレクトリからfindコマンドを実行し./a./bディレクトリの下でハードリンクされたファイルを見つけます./c

 $ find ./a ./b -type f -exec find ./c -samefile {} -printf "%p hard link to {}" \;
 ./c/f hard link to ./a/f


これは一つですあ(n^2)仕事。ファイルが多いので時間がかかります!

使用GNUの検索4.4.2Linux 3.13.0-85Ubuntu14.04

関連情報