重複ファイルを見つけるためにfslintを使用しようとしていますが、数ギガバイトのファイル全体をハッシュするのに時間がかかります。 ~によるとこのウェブサイト、以下の特徴で比較できます。
機能の概要
compare by file size
compare by hardlinks
compare by md5 (first 4k of a file)
compare by md5 (entire file)
compare by sha1 (entire file)
ただし、GUIやマニュアルページにはこれらのオプションは表示されません。ここで何か抜けましたか?
編集:コマンドラインの代わりにjdupesを使用しています。
jdupes -r -T -T --exclude=size-:300m --nohidden
これを行うには、gitリポジトリを複製してソースからビルドする必要がありました。 (残念ながら、パッケージのバージョンは古いです。)
また、それぞれを変更するにはソースコードを編集する必要がありました。
#define PARTIAL_HASH_SIZE 4096
到着
#define PARTIAL_HASH_SIZE 1048576
それから私は実際に私のファイルと正確に一致しました。なぜこのようにエンコードしたのかはわかりませんが、最初の4096バイトを一致させるだけでは十分ではなく、偽の重複も生成されます。 (ここではコマンドラインオプションが役に立つかもしれません)
答え1
答え2
find
次のようにファイルサイズをコピーできます。
find -type f -printf "%s\n" | sort -n | uniq -d
次に、必要に応じて行います。たとえば、grepです。
find -type f -printf "%s %p\n" \
| sort -n \
| grep -f <(find -type f -printf "^%s \n" | sort -n | uniq -d)
内容に関係なく、同じサイズのアイテムを探します。
257659 ./b
257659 ./bsort
257764 ./a
257764 ./asort
最初の4096バイトのみを一致させるだけでは十分ではなく、誤った重複が生成されます。
ハッシュファイルの開始、終了、中間などの条件を自由に追加します。スクリプトを直接書くことはそれほど難しくありません。
ただし、内容全体を読み取る前に重複している場合とそうでない場合があります。違いはどこでも発生する可能性があるため、どのような経験的方法もすべてを網羅することはできません。だから近道を選ぶと間違いが繰り返されることを当然受け入れる。
冗長性を確認する最速の方法は、ハードリンクにすることです。同じファイルであれば、もはやサイズや内容を確認する必要はありません。