对目录中的所有 *.txt 文件进行并行 md5sum

对目录中的所有 *.txt 文件进行并行 md5sum

尝试计算*.txt目录中所有文件的 md5 哈希值并将每个文件存储在相同的文件名中,但将扩展名替换为.txtto .md5

对于文件:foo.txt 我想创建文件:foo.md5 内容:

9fa74bee342222aadd999b2e8b2bef62 *foo.txt

我已经设法使用下面的命令获取所需的文件,但我想知道是否有一些更短的替代方案,或者至少有一种方法可以删除一两个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 实用程序和任何 shell:

LC_ALL=C find . -name '*.txt' -type f -print0 |
  xargs -r0 -l1 -P8 sh -c 'exec md5sum < "$1" > "${1%.*}.md5"' sh

相关内容