校验和并同时输入一个输入

时间:2011-05-11 15:38:24

标签: bash unix pipe checksum

我想安全地将一个大文件从一台计算机移动到另一台计算机,在存储之前必须对其进行处理。

我想把文件传递给运行处理脚本的ssh。

local.example.com$ cat file | ssh remote.example.com process.sh

(如果你有任何想法比我的好,请建议)

在进程脚本中,我希望在保存文件之前对文件进行校验和加密。这就是问题所在。

解决方案可能是两个:

  • 管道输入两个命令(cksum和openssl);但我发现的所有方式看起来都很复杂且次要可选。
  • hack cksum也做了类似猫的工作并在stderr上打印结果,这样我才能做到

    cksum --pipe | openssl enc > myfile
    

    通过stderr获取校验和。 不幸的是,我查看了代码,在没有做一些性能/缓冲损坏的情况下,我似乎很难做到这一点;)

可能有一个cksumming-transfering工具可以做到这一切,但它并没有让我想到。 无论如何,我想避免非标准和复杂的东西。

非常感谢。

修改:有关回答http://www.linuxjournal.com/content/shell-process-redirection

的有用链接

1 个答案:

答案 0 :(得分:4)

如果您使用cat > inputfile开始接收脚本,那将占用所有STDIN直到EOF,然后您的脚本可以运行输入文件所需的任何操作。

您也可以使用tee;

echo foo | tee >(sha1sum) >(md5sum)
d3b07384d113edec49eaa6238ad5ff00  -
f1d2d2f924e986ac86fdf7b36c94bcdf32beec15  -