同じファイルの80個のコピーのmd5sumsをお互いに比較し、不一致で失敗を報告する必要があります。どのようにしてbashで効果的にやりますか?私はそれを行うためのエレガントなアルゴリズムを探しています。bashで80個のmd5sumをどのように比較するのですか
答えて
md5sum FILES > MD5SUMS.md5
cut -c1-32 < MD5SUMS.md5 | sort | uniq -c | sort -n
戻りますこのようなもの:
1 485fd876eef8e941fcd6fc19643e5e59
1 585fd876eef8e941fcd6fc19643e5e59
5 385fd876eef8e941fcd6fc19643e5e59
読む:5 fi lesには同じチェックサムがあり、他の2つには "個別の"チェックサムがあります。私は、大多数が正しいと考えているので、追加します。
| tail -1 | cut -c 9-
最後の行のチェックサムを返します。
md5sum FILES > MD5SUMS.md5
grep -v "$(cut -c1-32 < MD5SUMS.md5 | sort | uniq -c | sort -n | tail -1 | cut -c 9-)" MD5SUMS.md5 | cut -c35-
これで、非多数ファイルのファイル名が出力されます。
md5sum FILES | sed 's/ .*$//' | sort -u
複数の出力行がある場合は、不一致があります。
(不一致がある場合これはあなたを教えてくれません。)
が一緒にそれを置く、とやや少ない簡潔awk
コマンドでsed
コマンドを置き換える:
count=$(md5sum "[email protected]" | awk '{print $1}' | sort -u | wc -l)
if [ $count -eq 1 ] ; then
echo "Everything matches"
else
echo "Nope"
fi
'sedの/。* $ // ''は暗号化されていない 'cut -d' '-f1'だが+1である。 –
またはそれほど暗い: 'awk '{print $ 1}' –
私は、異なる金額のファイルを識別する大きなソリューションに取り組んでいましたが、あなたの1つのライナーに対して膨大な量の余分な仕事をする価値はないでしょう。あなたはいつも "md5sum FILES | grep BADSUM"の後ろにあるファイルを見つけることができます。 –
の出力:
md5sum $files | sort -k 1,2
は、その後、対応するファイル名でソートされた順序でチェックサムの一覧です。結果に目を向ける必要がある場合は、これで十分でしょう。奇妙なボールの結果を特定する必要がある場合は、プレゼンテーションを決定する必要があります。あなたは80枚の「同じファイル」を持っていると言います。実際には、8つのバージョンの「ファイル」のそれぞれが10個ずつコピーされているとします。どのようにして正しいか、どちらが偽であるかをどうやって決めようとしていますか? 1つのハッシュで41、もう1つで39の場合はどうなりますか?39が間違っていて41が正しいことは確かですか?明らかに、1つのハッシュが支配的になる可能性が高いですが、それらの厄介な境界条件については心配する必要があります。
またのような手の込んだもの、行うことができます。これはあなたのMD5チェックサム、繰り返し回数、およびファイル名からなる出力を与える
md5sum $files | sort -k 1,2 > sorted.md5
sed 's/ .*//' sorted.md5 | uniq -c | sed 's/^ *\([0-9][0-9]*\) \(.*\)/\2 \1/' > counted.md5
join -j 1 -o 1.1,2.2,1.2 sorted.md5 counted.md5
を。必要に応じて、最初のsed
スクリプトをawk '{print $1}'
に置き換えることができます。 2番目の数字はawk '{printf "%s %s\n", $2, $1}'
で置き換えられます(これはおそらくより明確です)。はです。その理由は、の出力の先行スペースを取り除くことで、join
を混乱させるからです。
md5sum $files | sort -k 1,2 > sorted.md5
awk '{print $1}' sorted.md5 | uniq -c | awk '{printf "%s %s\n", $2, $1}' > counted.md5
join -j 1 -o 1.1,2.2,1.2 sorted.md5 counted.md5
私はdbatools.hをコピーして、いくつかのファイルのx1.h、x2.hとx3.hを作成し、files=$(ls *.h)
を設定します。出力した:
0763af91756ef24f3d8f61131eb8f8f2 1 dblbac.h
10215826449a3e0f967a4c436923cffa 1 dbatool.h
37f48869409c2b0554d83bd86034c9bf 4 dbatools.h
37f48869409c2b0554d83bd86034c9bf 4 x1.h
37f48869409c2b0554d83bd86034c9bf 4 x2.h
37f48869409c2b0554d83bd86034c9bf 4 x3.h
5a48695c6b8673373d30f779ccd3a3c2 1 dbxglob.h
7b22f7e2373422864841ae880aad056d 1 dbstringlist.h
a5b8b19715f99c7998c4519cd67f0230 1 dbimglob.h
f9ef785a2340c7903b8e1ae4386df211 1 dbmach11.h
これは、さらに必要に応じて処理することができます(逸脱ファイルが最後に表示されるので、例えば、sort -k2,3nr
で、降順にカウントを取得します)。一緒にグループ化された重複ファイルの名前と、各重複がいくつあるかを示すカウントがあります。あなたが次にすることは、あなたに依存します。
実際の制作スクリプトでは、もちろんハードコードされた名前の代わりに一時ファイル名が使用され、それ自体は後でクリーンアップされます。
- 1. DATEADD - どのように比較するのですか
- 2. bashでのコンパイルの比較
- 3. Bashの比較
- 4. データベースとのデータの比較はどのようにですか?
- 5. UIPickerViewでどのように比較できますか?
- 6. 2つのオブジェクトをフィールドでどのように比較するのですか?
- 7. 時間をbashの文字列/数字と比較するにはどうすればよいですか?
- 8. Bashタイムスタンプの比較
- 9. bashスクリプトで数値を比較する
- 10. PIDをbashで比較する
- 11. bashスクリプトでHexを比較する
- 12. ARMのsssemblyで前のcmpと比較してbne分岐をどのように比較できますか?
- 13. どのように2つのデータテーブルを比較するのですか
- 14. Netlogoのカメはどのように変数を比較するのですか?
- 15. bashの文字列を比較する
- 16. mysqlはマルチタイプの比較をどのように行うのですか?
- 17. MongoDBはオブジェクトのソート/比較をどのように行うのですか
- 18. Array.findとforeachなどのイテレータをどのように比較できますか?
- 19. WiXのレジストリバージョンを比較するにはどうすればよいですか?
- 20. C#Viewbagの値をJavascriptでどのように比較できますか?
- 21. Bashで負の値とawkコマンドを比較するには?
- 22. Swiftのジェネリックタイプをどのように比較しますか?
- 23. Coredata EntityのZ_PKとどのような値を比較するのですか?
- 24. Xcodeの比較機能はどのように使うのですか?
- 25. 文字列の比較。どのようにstd :: wstringと文字列を比較できますか? WRT strcmp
- 26. どのようにアンドロイドの時間の値を比較する
- 27. SqlCommandと比較するにはどのように追加できますか?
- 28. MD5Sumアルゴリズムはどのように機能しますか?
- 29. 、どのように2つのcsvファイルを比較する?
- 30. Bashで大量のファイルをすばやく比較する
これらのファイルはすべて同一であると想定されていますが、そうでないファイルはどれですか? –