一部のファイルの名前をその内容のMD5の合計に変更したいと思います。たとえば、ファイルが空のfoo
場合、名前をd41d8cd98f00b204e9800998ecf8427e
。
スクリプトでなければなりませんか、それともrename
ツールのようなものを使用できますか?
ベストアンサー1
Glennの答えは素晴らしいです。マルチドキュメントが改善されました。
md5sum file1 file2 file3 | # or *.txt, or whatever
while read -r sum filename; do
mv -v "$filename" "$sum"
done
ファイルまたは同様のファイルを作成する場合は、find
呼び出しをmd5sum
同様のものに置き換えることができますfind . <options> -print0 | xargs -0 md5sum
(出力もシェルループにパイプされます)。
md5sum
これは、複数の行と合計、対応するファイルで構成され、各行を読み取り、ファイル名を元の名前から sum に変更するコマンドを実行するシェルループにパイプされる出力ですmv
。同じ量のファイルは上書きされます。ただし、奇妙なことが起こらない限り(たとえば、md5ハッシュ競合を処理する場合)、これはそのファイルの内容が同じであるため、とにかくデータが失われないことを意味します。各ファイルに追加の操作を導入する必要がある場合は、元のファイル名とMD5の合計をそれぞれ含む変数を参照$filename
してループに入れることができます。$sum