MD1
とMD2
の2つのファイルがあります。
MD1
にはmd5sumが含まれます。
5f31caf675f2542a971582442a6625f6 /root/md5filescreator/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreator/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreator/hash3.txt
ここで、hash1
、hash2
、およびhash3
は、フォルダーmd5filescreator
にある3つのファイルです。
同様に、MD2
には以下が含まれます。
163559001ec29c4bbbbe96344373760a /root/md5filescreators/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreators/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreators/hash3.txt
これらのファイルはmd5filescreators
フォルダーにあります。
md5filescreator
のチェックサムを、md5filecreators
の対応するファイルのチェックサムと比較したい。
シェルスクリプトは、同じチェックサムを持つファイルの場合はOKを、そうでないファイルの場合はFALSEをファイル名とともに返す必要があります。
これはmd5sum --check
を使用して実行できます(通常は1つのMD5ファイルのみの変更をチェックするため)。
これは
md5sum --check
?を使用して実行できるかどうかを知りたい(通常は1つのMD5ファイルのみの変更をチェックするため)。
いいえ、できません。
md5sum --check
は、入力ファイルの2番目の列の各ファイルへのパスを読み取り、最初の列で報告されたチェックサムに対してMD5チェックサムを再度チェックするためのものです。 2つのファイルのチェックサムを直接比較する場合は、テキストファイルを比較する必要があります。
paste
+ AWKを使用すると、次のことができます。
paste file1 file2 | awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
paste file1 file2
:file1
の行Nでfile2
の行Nに結合します。awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
:最初のフィールドが3番目のフィールドと等しい場合(MD5の合計が一致する場合)、x
に「OK」を割り当て、そうでない場合はx
に「FALSE」を割り当て、2番目のフィールド(ファイル名)の後にx
の値が続きます。% cat file1
5f31caf675f2542a971582442a6625f6 /root/md5filescreator/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreator/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreator/hash3.txt
% cat file2
163559001ec29c4bbbbe96344373760a /root/md5filescreators/hash1.txt
4efe4ba4ba9fd45a29a57893906dcd30 /root/md5filescreators/hash2.txt
1364cdba38ec62d7b711319ff60dea01 /root/md5filescreators/hash3.txt
% paste file1 file2 | awk '{x = $1 == $3 ? "OK" : "FALSE"; print $2" "x}'
/root/md5filescreator/hash1.txt FALSE
/root/md5filescreator/hash2.txt OK
/root/md5filescreator/hash3.txt OK
これを確認する簡単な方法は、両方のファイル間でどの行がnot複製されているかを確認することです。
sort file1 file2 | uniq --unique
uniq --unique
は、再び現れていない行を出力します 。したがって、ハッシュが一致するファイルには重複した行が含まれ、出力には表示されません。出力が生成されたかどうかを簡単にテストするには、grep
を使用します。
sort file1 file2 | uniq --unique | grep -q .
この場合、ディレクトリが異なるため、もう少し処理が必要です。
awk -F/ '{print $1, $NF}' | sort | uniq --unique | awk '!a[$2]++{print $2}'
または、完全にawkで:
awk -F/ 'FNR == NR {hash[$NF] = $1; next} hash[$NF] != $1 {print $NF}'
どちらの場合も、ハッシュが異なるファイル名のみを取得します。