多个输入字符串上的一个md5sum进程(通过xargs?)

时间:2016-11-09 15:06:11

标签: bash

考虑以下三个命令:

$ echo -n "string1" | md5sum
34b577be20fbc15477aadb9a08101ff9  -

$ echo -n "string2" | md5sum
91c0c59c8f6fc9aa2dc99a89f2fd0ab5  -

$ echo -n "string3" | md5sum
9e6dc8685bf3c1b338f2011ace904887  -

现在,我们想要一个像这样的命令:

$ echo -n "string1 string2 string2" | xargs md5sum
34b577be20fbc15477aadb9a08101ff9  -
9e6dc8685bf3c1b338f2011ace904887  -
9e6dc8685bf3c1b338f2011ace904887  -

如何,

的输出
$ echo -n "string1 string2 string2" | xargs md5sum

是:

md5sum: string1: No such file or directory
md5sum: string2: No such file or directory
md5sum: string3: No such file or directory

你能帮我们解决这个问题吗?

  • 我们不想为md5sum执行3个进程,我们真的想在3个输入字符串上执行1个进程(这就是xargs发挥作用的原因......对吗?)

  • 我们不想将任何文件写入磁盘,我们希望它能像访问RAM一样快。

1 个答案:

答案 0 :(得分:3)

md5sum不支持任何使用模式,其中单个调用可以读取多个不同的项以从stdin进行哈希处理。因此,xargs或其他shell工具的任何可能组合都不能以您想要的方式调用它。 (在md5sum允许将命名的FIFO作为参数传递给它的平台上,可以使用进程替换的创造性使用,但是在我测试的至少一个平台上,该命令仅适用于常规文件。)

考虑使用其他工具:

hashmany() {
    python -c '
import hashlib, sys
for arg in sys.argv[1:]: print hashlib.md5(arg).hexdigest()
' "$@"
}

...此后,您的代码可以运行:

hashmany string1 string2 string3

...输出:

34b577be20fbc15477aadb9a08101ff9
91c0c59c8f6fc9aa2dc99a89f2fd0ab5
9e6dc8685bf3c1b338f2011ace904887