是否可以同时将 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
因为在这两种情况下 file
被 tar
读取一次,然后 md5sum
读取第二次
除非你试图实现的目标中有我遗漏的东西,否则你需要最小化驱动器读取的命令是:
cat file | tee >(md5sum | sed 's/-/file/' > file_mybackup.md5) | gzip -c | split -d -b 1M - file.gz.
注意:由于您归档的是单个文件而不是目录,所以我只使用 gzip
而不是 tar
。是的,这不会存储文件权限,也不会在目录上工作! ……有这个要求吗?
我有一个压缩命令,它通过管道传输到 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
因为在这两种情况下 file
被 tar
读取一次,然后 md5sum
除非你试图实现的目标中有我遗漏的东西,否则你需要最小化驱动器读取的命令是:
cat file | tee >(md5sum | sed 's/-/file/' > file_mybackup.md5) | gzip -c | split -d -b 1M - file.gz.
注意:由于您归档的是单个文件而不是目录,所以我只使用 gzip
而不是 tar
。是的,这不会存储文件权限,也不会在目录上工作! ……有这个要求吗?