web-dev-qa-db-ja.com

数千のファイルをコピーした後、データの整合性をチェックします

私は何千ものファイルをexFAT MicroSDカードにコピーしました。

ファイル数とバイト数は同じですが、データが破損しているかどうかはどうすればわかりますか?

JackPal Android Terminalもこのコマンドをサポートしているとよいでしょう。

11
neverMind9

デバイスをアンマウント、イジェクト、および再マウントします。次に使用します

diff -r source destination

rsyncを使用してコピーした場合は、rsync -n -cは非常に便利で、diffとほぼ同じです。ただし、ビットごとの比較は行いません。 MD5チェックサムを使用します。


あるハードドライブから別のハードドライブにコピーした後の大きなディレクトリの確認

11
sourcejedi

MD5サムを使用することは良い方法ですが、正規の使用方法は次のとおりです。

  1. cdをソースファイルのディレクトリに移動して、次のコマンドを発行します。

    md5sum * >/path/to/the/checksumfile.md5
    

多くのレベルのディレクトリがある場合は、shopt -s globstarを使用して、***/*に置き換えることができます。

MD5ファイルのファイル仕様は、コマンドラインで指定したとおりになっていることに注意してください(パターンが/で始まっていない限り、相対パス)。

  1. cdをコピーしたファイルのディレクトリに移動して、次のコマンドを発行します。

    md5sum -c /path/to/the/checksumfile.md5
    

-cを使用すると、md5sumは、提供されたMD5ファイルのファイル仕様を読み取り、これらのファイルのMD5を計算し、MD5ファイルの値と比較します(これが、ファイル仕様が通常残っている理由です)相対ファイルなので、さまざまなディレクトリのファイルでMD5ファイルを再利用できます。

この方法でMD5 sumを使用すると、MD5の違い、および欠落ファイルについてもすぐにわかります。

18
xenoid
rsync -rc original-dir/ copied-dir/

-cを指定すると、rsyncはMD5チェックサムによってファイルを比較します(これがない場合、通常、より迅速な比較のためにタイムスタンプとサイズのみが使用されます)。

これにより、rsyncは宛先とは異なる、または欠落しているものをコピーします。これを回避するには、-nおよび-iを使用することもできます。前者は、rsyncが変更を行わずに比較のみを行うことを保証し、後者は、認識した違いを表示するようにします。

たとえば、次のディレクトリがあります。

$ find dir1/ dir2/
dir1/ dir2/
dir1/
dir1/d
dir1/d/a
dir1/d/b
dir1/c
dir2/
dir2/d
dir2/d/a
dir2/d/b

この:

$ rsync -rcni dir1/ dir2/
>f+++++++++ c
>fc.T...... d/b

これらすべての+sを介して、ファイルcdir2に存在せず、ファイルd/bは存在するが、異なる(cが最初の列に表示されます)。 Tは、それが更新される時間だと言います(-nを使用しなかった場合)。

-iの出力の形式は、rsyncのマンページに記載されています。 man rsyncを実行し、/--itemize-changes$と入力して(そしてEnterキーを押して)、その出力を説明する部分にアクセスできます。

5
JoL

個々のファイルのハッシュサムを生成し、MD5ハッシュを生成できる1つのテキストファイルに出力することが可能です。このテキストファイルの場合、このハッシュリストのサイズはsha512sumなどのよりハードなハッシュ関数を使用した場合に顕著なパフォーマンスの違いを引き起こすほど大きくないため、任意のハッシュ関数を使用できます。
私はcksumを使用しています。これは、世界中で利用できるためです(sumおよびcrc32は、JackPalのAndroid端末)には含まれていません)および最大これは、sha512sumのような暗号化された安全なアルゴリズムではありませんが、オフライン環境でデータの整合性を検証するには任意のハッシュ関数で十分です。ただし、すべてのファイルハッシュに同じ長さ(つまり32)で、md5sumを使用します。これは、世界で最も高速にサポートされているsecureハッシュアルゴリズム(古いですが、はるかに高速です)他のshaアルゴリズムよりも優れています。

ソースと宛先の両方で次のコマンドを実行します。

cksum /path/to/folder/* | tee -a hash.files.txt |cut -f 1 -d " " >>hash.list.txt #extracts pure hashsum string only for the output, to hide the different file path.
md5sum hash.list.txt

…または単一のコマンドで:

cksum /path/to/folder/* | tee -a hash.files.txt | cut -f 1 -d " " | tee -a hash.list.txt | sort | md5sum

ハッシュサムリストファイルの名前(hash.list.txtおよびhash.files.txt(私の例では)指定するものは何でもかまいません。破損したファイルを識別できるように2つのファイルを生成します(最初のファイルにはファイル名も含まれ、2番目のファイルは比較用です)。

sortは、shbashがアルファベット順のソートをわずかに異なる方法で実装しているためです。 sortはそれを補います。

3
neverMind9

上記の他の細かい回答とともに、 http://md5deep.sourceforge.net/ からhashdeepを検討することをお勧めします。科学コミュニティには十分な規模のユーザーベースがあり、テラバイト単位のデータが何千ものディレクトリに散らばってこのタイプのことを頻繁に行わなければなりません。

3
don bright