【问题标题】:Checksum and pipe an input simultaneously同时校验和和管道输入
【发布时间】:2011-05-11 15:38:23
【问题描述】:

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

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

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

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

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

解决方案可能有两种:

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

    cksum --pipe | openssl enc > myfile
    

    并通过 stderr 取回校验和。 不幸的是,我查看了代码,如果不造成一些性能/缓冲损害,我似乎很难做到这一点;)

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

非常感谢。

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

【问题讨论】:

    标签: bash unix pipe checksum


    【解决方案1】:

    如果您以cat > inputfile 开始接收脚本,这将在 EOF 之前吃掉所有 STDIN,那么您的脚本可以运行输入文件所需的任何操作。

    你也可以使用tee;

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

    【讨论】:

    • 是的,我知道,但这需要在 处理之前将输入存储在文件中,并且因为我想要执行次优的流操作(RC4 和 CRC),没有?
    • 您也可以将tee 与进程重定向一起使用。我将编辑并添加一个示例。
    • 就是这样!我查看了tee,但我不知道进程重定向。您认为进程重定向或 ssh 管道会导致性能下降吗?
    • @FileSottile,如果这回答了您的问题,那么您应该接受它以给予 Daenyth 适当的信任。
    • @FiloSottile:分叉进程有一些(非常)小的开销——我们说的是毫秒。除非这是在一个紧密的内部循环中并且经常重复,否则你会没事的。先让它工作,然后再分析代码,如果它很慢。
    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多