私は何千ものファイルをexFAT MicroSDカードにコピーしました。
ファイル数とバイト数は同じですが、データが破損しているかどうかはどうすればわかりますか?
JackPal Android Terminalもこのコマンドをサポートしているとよいでしょう。
デバイスをアンマウント、イジェクト、および再マウントします。次に使用します
diff -r source destination
rsync
を使用してコピーした場合は、rsync -n -c
は非常に便利で、diff
とほぼ同じです。ただし、ビットごとの比較は行いません。 MD5チェックサムを使用します。
MD5サムを使用することは良い方法ですが、正規の使用方法は次のとおりです。
cd
をソースファイルのディレクトリに移動して、次のコマンドを発行します。
md5sum * >/path/to/the/checksumfile.md5
多くのレベルのディレクトリがある場合は、shopt -s globstar
を使用して、*
を**/*
に置き換えることができます。
MD5ファイルのファイル仕様は、コマンドラインで指定したとおりになっていることに注意してください(パターンが/
で始まっていない限り、相対パス)。
cd
をコピーしたファイルのディレクトリに移動して、次のコマンドを発行します。
md5sum -c /path/to/the/checksumfile.md5
-c
を使用すると、md5sum
は、提供されたMD5ファイルのファイル仕様を読み取り、これらのファイルのMD5を計算し、MD5ファイルの値と比較します(これが、ファイル仕様が通常残っている理由です)相対ファイルなので、さまざまなディレクトリのファイルでMD5ファイルを再利用できます。
この方法でMD5 sumを使用すると、MD5の違い、および欠落ファイルについてもすぐにわかります。
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を介して、ファイルc
はdir2
に存在せず、ファイルd/b
は存在するが、異なる(c
が最初の列に表示されます)。 T
は、それが更新される時間だと言います(-n
を使用しなかった場合)。
-i
の出力の形式は、rsyncのマンページに記載されています。 man rsync
を実行し、/--itemize-changes$
と入力して(そしてEnterキーを押して)、その出力を説明する部分にアクセスできます。
個々のファイルのハッシュサムを生成し、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
は、sh
とbash
がアルファベット順のソートをわずかに異なる方法で実装しているためです。 sort
はそれを補います。
上記の他の細かい回答とともに、 http://md5deep.sourceforge.net/ からhashdeepを検討することをお勧めします。科学コミュニティには十分な規模のユーザーベースがあり、テラバイト単位のデータが何千ものディレクトリに散らばってこのタイプのことを頻繁に行わなければなりません。