sch*_*eik 7 pipe process-substitution variable
嗯,任务很简单:我的脚本的一部分必须计算 md5 和 sha1 哈希值。输入是一个文件 - 大文件 - 必须将散列放入 MD 和 SH 变量中,以便以后的输出组合。
虽然处理后的文件非常大(数百 GB),但我尝试在读取后使用某种数据多次使用。我发现了一种叫做进程替换的东西,我采用了下一种方式:
$ dd if=big.tgz 2>/dev/null |tee >(sha1sum ) > >(md5sum ) ;
Run Code Online (Sandbox Code Playgroud)
代替:
$ SH=$(sha1sum big.tgz); MD=$(md5sum big.tgz);
Run Code Online (Sandbox Code Playgroud)
但我发现了下一个:
显然没有资源也没有节省时间,因为两者都需要大约。40 秒(对于 4.776 GB 文件)
我不知道如何将子流程的结果保存>(md5sum )
到变量 MD 中以便稍后在脚本中使用它
我试图理解 pipexec 但即使是漂亮的彩色插图也没有成功。
除了 VAR=$(command) 之外,还有其他方法可以将输出重定向到 vriable 吗?
在性能方面,您可能会受到 CPU 的限制。实际上,MD5 和 sha1sum 在 40 秒内传输 4.7TB 感觉很快。所以即使你这样工作。值得一提的是,您将减少磁盘 IO。
你真的不需要这样做dd
。您也可以将 sha1sum 和 md5sum 的输出直接写入文件以供以后使用
tee < big.tgz >(sha1sum > big.tgz.sha1 ) > >(md5sum > big.tgz.md5 )
sha1=`cat big.tgz.sha1`
md5=`cat big.tgz.md5`
Run Code Online (Sandbox Code Playgroud)
我建议使用像这样的临时文件(big.tgz.sha1
和big.tgz.md5
),因为据我所知,没有办法同时设置两个具有不同值的变量。您可以将其中之一直接捕获到变量中,但不能同时捕获两者。允许 和md5sum
同时sha1sum
写入同一个标准输出可能会导致不可预测的问题。
归档时间: |
|
查看次数: |
721 次 |
最近记录: |