FSlintを使用してファイルサイズでのみ重複エントリを探していますか?

FSlintを使用してファイルサイズでのみ重複エントリを探していますか?

重複ファイルを見つけるために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

FSlint はこれらすべての比較をサポートしますが、設定は許可されません。常にこれらすべての情報を使用して重複を排除します。

findupこれはそれ自体がシェルスクリプトであり、各比較は別々です。オプションのブロックが表示されるため、不要なテストをスキップするためにコメントを付けることができます。

jdupesに関しては質問ハッシュサイズについては、ここで扱うよりもそこで議論を続ける方が生産的です。

答え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バイトのみを一致させるだけでは十分ではなく、誤った重複が生成されます。

ハッシュファイルの開始、終了、中間などの条件を自由に追加します。スクリプトを直接書くことはそれほど難しくありません。

ただし、内容全体を読み取る前に重複している場合とそうでない場合があります。違いはどこでも発生する可能性があるため、どのような経験的方法もすべてを網羅することはできません。だから近道を選ぶと間違いが繰り返されることを当然受け入れる。

冗長性を確認する最速の方法は、ハードリンクにすることです。同じファイルであれば、もはやサイズや内容を確認する必要はありません。

関連情報