複数のファイルの名前をその内容のMD5の合計に変更するには?

複数のファイルの名前をその内容のMD5の合計に変更するには?

一部のファイルの名前をその内容の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

おすすめ記事