ディレクトリ内のすべてのファイルのmd5チェックサムリストを作成したいと思います。
したいcat filename | md5sum > ouptput.txt
。ディレクトリ内のすべてのファイルに対して、1ステップでこれを実行したいです。
どんな援助も素晴らしいでしょう。
ディレクトリ内のすべてのファイルのmd5チェックサムリストを作成したいと思います。
したいcat filename | md5sum > ouptput.txt
。ディレクトリ内のすべてのファイルに対して、1ステップでこれを実行したいです。
どんな援助も素晴らしいでしょう。
回答:
md5sum
複数のファイル名またはbash拡張を渡すことができます。
$ md5sum * > checklist.chk # generates a list of checksums for any file that matches *
$ md5sum -c checklist.chk # runs through the list to check them
cron: OK
database.sqlite3: OK
fabfile.py: OK
fabfile.pyc: OK
manage.py: OK
nginx.conf: OK
uwsgi.ini: OK
凝ったものにしたい場合はfind
、ファイルをドリルダウンしてフィルターするなど、再帰的に作業するなどの方法を使用できます。
find -type f -exec md5sum "{}" + > checklist.chk
md5sum
サブディレクトリ内のファイルを、上記md5sum *
...と言って、サブディレクトリレベルに入る放射ディレクトリがある
find -type f -exec md5sum '{}' +
して「find -type f -exec md5sum '{}'」で問い合わせてすみませんが、それを取得できました。ありがとう:)
openssl md5 * > checklist.txt
**
(例えばzshのような)を再帰的に、それも簡単です:md5sum **/* 2>/dev/null
すばらしいチェックサム作成/検証プログラムはrhashです。SFV互換ファイルも作成し、それらもチェックします。
md4、md5、sha1、sha512、crc32、その他多くの多くをサポートしています。
さらに、md5deepやsha1deepなどの再帰的な作成(-rオプション)を実行できます。
最後に、チェックサムファイルの出力をフォーマットできます。例えば:
rhash --md5 -p '%h,%p\n' -r /home/
/home
ディレクトリから再帰的にファイルのフルパスを含むCSVファイルを出力します。
-eオプションを使用しても、crc32 sumをnameに挿入することでファイルの名前を変更できます。
PhoenixNL72の例では、「md5sum」を「rhash」に変更できます。
次に、さらに2つの例を示します。
まだ存在しない各ディレクトリに、絶対パスでmd5ファイルを作成します。
find "$PWD" -type d | sort | while read dir; do [ ! -f "${dir}"/@md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 already present" ; [ ! -f "${dir}"/@md5Sum.md5 ] && md5sum "${dir}"/* > "${dir}"/@md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5;done
まだ1つも存在しない各フォルダーにmd5ファイルを作成します:パスなし、ファイル名のみ:
find "$PWD" -type d | sort | while read dir; do cd "${dir}"; [ ! -f @md5Sum.md5 ] && echo "Processing " "${dir}" || echo "Skipped " "${dir}" " @md5Sum.md5 allready present" ; [ ! -f @md5Sum.md5 ] && md5sum * > @md5Sum.md5 ; chmod a=r "${dir}"/@md5Sum.md5 ;done
1と2で異なるのは、結果のmd5ファイルでのファイルの表示方法です。
コマンドは次のことを行います。
このスクリプト全体の出力は、ファイル(.....; done> test.log)にリダイレクトするか、別のプログラム(grepなど)にパイプで送ることができます。出力は、スキップされたディレクトリと処理されたディレクトリのみを示します。
正常に実行されると、現在のディレクトリの各サブディレクトリに@ md5Sum.md5ファイルが作成されます。
ファイルに@ md5Sum.md5という名前を付けたため、samba共有のディレクトリの最上部にリストされます。
すべての@ md5Sum.md5ファイルを確認するには、次のコマンドを実行します。
find "$PWD" -name @md5Sum.md5 | sort | while read file; do cd "${file%/*}"; md5sum -c @md5Sum.md5; done > checklog.txt
その後、grep -v OKを使用してchecklog.txtをgrepし、異なるすべてのファイルのリストを取得できます。
特定のディレクトリで@ md5Sum.md5を再生成するには、たとえばファイルを変更または追加したときに、@ md5Sum.md5ファイルを削除するか、名前を変更して再度generateコマンドを実行します。
私はこの問題にぶつかり、上記の解決策はエレガントですが、この状況に迅速で汚いハックが必要でした。つまり、1つのディレクトリとその1レベル下のサブディレクトリです。
そのため、シェルにディレクトリを入力して実行します:
md5sum * */* 2>/dev/null > md5sum.md5
これにより、最上位ディレクトリのすべてのファイルが取得され、サブディレクトリがディレクトリであるというエラー警告が削除され、サブディレクトリの内容に対してmd5sumsが実行されます。利点:覚えやすく、本来の動作を正確に実行します。私は常にfind構文に戸惑い、頭の外では決して覚えられないため、ディレクトリ名のスペースを処理するなどループする必要はありません。このライナーはうまく機能しました。堅牢で強力なソリューションではなく、1レベル以上のサブディレクトリには適していませんが、問題をすばやく簡単に修正できます。