私は重複したファイルがたくさん含まれているディレクトリ構造を持っています。 (ディレクトリツリーには67,000個のファイルがあり、約8,000個の重複ファイルがあります。)もちろん、レプリカのバイトサイズと内容は同じですが、ファイル名はまったく異なります。 fdupes /dir/path -rm を使用する場合は、125 個の重複項目のみを取得します。ただし、ディレクトリツリー全体の内容のSHA256をテキストファイルにダンプすると、次のようになります。
input_dir=$1
IFS=$'\n'
for i in $(find ${input_dir} -type f); do
sha256sum "${i}" >> dupfilenames.txt
done
次に、重複したSHA256署名を検索します。
cat dupfilenames.txt | cut -d " " -f1 | sort | uniq | while read sha; do
count=`cat dupfilenames.txt | grep ${sha} | wc -l`
if [ $count -gt 1 ]; then
echo "${sha}:${count}"
IFS=$'\n'
files=( $(cat dupfilenames.txt | grep ${sha} | cut -d " " -f3) );
orig_size=`stat -c%s "${files[0]}"`
for i in "${files[@]:1}"; do
if [ $orig_size -eq `stat -c%s "${i}"` ]; then
echo "Origsize:${orig_size} vs. `stat -c%s "${i}"` '${i}'"
else
echo "SHA matches but filesize doesn't for '${i}'!!!"
fi
done
fi
done
コードを実行した後、約8000の重複署名が得られました。
これは、fdupesで使用されるMD5署名が不足しているためですか? (バイトあたりのファイルサイズは言うまでもなく、まったく同じ内容のファイルが125個以上あることを知っています。
答え1
わかりました、わかりました - 明示的なスイッチ(-H)が指定されていない場合、fdupesはハードリンクされたファイルを無視します。これが重複ファイル数の違いが発生する理由です。 -H スイッチを使用して実行すると、重複回数は上記で引用したコードと同じです。