同时校验和和管道输入

Fil*_*ile 4 unix bash checksum pipe

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

我想将文件通过管道传输到运行处理脚本的 ssh 中。

local.example.com$ cat file | ssh remote.example.com process.sh
Run Code Online (Sandbox Code Playgroud)

(如果您有比我更好的想法,请提出)

在处理脚本中,我想在保存文件之前对文件进行校验和加密。问题来了。

解决方案可能有两种:

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

    cksum --pipe | openssl enc > myfile
    
    Run Code Online (Sandbox Code Playgroud)

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

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

多谢。

编辑:关于答案的有用链接http://www.linuxjournal.com/content/shell-process-redirection

Dae*_*yth 5

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

您还可以使用tee

echo foo | tee >(sha1sum) >(md5sum)
foo
d3b07384d113edec49eaa6238ad5ff00  -
f1d2d2f924e986ac86fdf7b36c94bcdf32beec15  -
Run Code Online (Sandbox Code Playgroud)