ディレクトリ内のすべてのファイルのmd5ハッシュを計算し、各ファイルを同じファイル名で*.txt
保存しますが、拡張子を 。.txt
.md5
ファイルの場合:foo.txt
ファイルを生成したい:foo.md5
内容:
9fa74bee342222aadd999b2e8b2bef62 *foo.txt
以下のコマンドを使用して必要なファイルを取得しましたが、より短い選択肢があるかどうか、または少なくとも1つまたは2つのawk
コマンドを削除する方法があるかどうか疑問に思います。
time find *.txt | parallel md5sum | awk '{ print $1, $2, $2 }' | awk '{$1 $2 $3 > gsub(".txt", ".md5", $3); print}' | awk '{ print $1, "*"$2 > $3 }'
私はいくつかの選択肢を見つけましたが、並列性を使わずにファイル名を変更する代わりに、.md5をファイル名に追加します。そしてmd5ハッシュだけを保存するので、*filename
修正が必要です。
答え1
関数を作成して実行しますparallel
。
_md5(){
md5sum -b "$1" > "$1.md5"
}
export -f _md5
parallel -j8 _md5 ::: *.txt
"${1%.*}".md5
拡張子md5
を追加する代わりに置き換えるために使用されます。
答え2
そしてzsh
:
autoload zargs
m5() md5sum < $1 > $1:r.md5
zargs -l1 -rP8 -- **/*.txt(ND.) -- m5
またはGNUユーティリティとシェルを使用してください。
LC_ALL=C find . -name '*.txt' -type f -print0 |
xargs -r0 -l1 -P8 sh -c 'exec md5sum < "$1" > "${1%.*}.md5"' sh