是否可以同时将 tar 命令的输出通过管道传输到拆分命令和 md5sum 检查?

Is it possible to simultaneously pipe the output of a tar command to a split command and md5sum check?

我有一个压缩命令,它通过管道传输到 md5sum 检查命令:

   tar zcvpf file.tar.gz file | xargs -I '{}' bash -c "test -f '{}' && md5sum '{}'" | tee file_mybackup.md5

我现在想将 tar.gz 文件拆分为 100MB 的块。我可以通过以下方式做到这一点:

   tar zcvpf - file | split -d -b 1M - file.tar.gz.

有没有一种方法可以通过管道传输 tar 命令的输出来同时执行拆分命令和 md5sum 检查?我知道 split 不会输出到 STDOUT,所以我无法从 split 命令通过管道传输到 md5sum 命令。 我尝试使用命名管道:

    mkfifo newpipe

    tar zcvpf - file | tee newpipe | split -d -b 1M - file.tar.gz. &

    cat newpipe | xargs -I '{}' bash -c "test -f '{}' && md5sum '{}'" | tee file_mybackup.md5

然而,这无法输出 md5sum 输出。任何帮助将不胜感激

好吧我终于找到了解决方案

    tar zcvpf >(split -d -b 1M - file.) file | xargs -I '{}' bash -c "test -f '{}' && md5sum '{}'" | tee file.md5

我将标准输入重定向到初始 tar 命令中的拆分命令,同时将此 tar 的输出通过管道传输到 xargs。希望这对其他人有帮助。

您的命令:

tar zcvpf file.tar.gz file | xargs -I '{}' bash -c "test -f '{}' && md5sum '{}'" | tee file_mybackup.md5

...并没有比这个更简单的命令(即不需要 xargs)更有效(就最小化驱动器读取而言):

tar zcvpf file.tar.gz file && md5sum file | tee file_mybackup.md5

因为在这两种情况下 filetar 读取一次,然后 md5sum

读取第二次

除非你试图实现的目标中有我遗漏的东西,否则你需要最小化驱动器读取的命令是:

cat file | tee >(md5sum | sed 's/-/file/' > file_mybackup.md5) | gzip -c | split -d -b 1M - file.gz.

注意:由于您归档的是单个文件而不是目录,所以我只使用 gzip 而不是 tar。是的,这不会存储文件权限,也不会在目录上工作! ……有这个要求吗?