是否可以同时将tar命令的输出传递给split命令和md5sum检查?

时间:2015-10-05 09:08:57

标签: bash tar md5sum

我有一个压缩命令,我将其导入md5sum check命令:

   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命令的输出同时执行split命令和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输出。任何帮助将不胜感激

2 个答案:

答案 0 :(得分:0)

好的,我最终找到了解决方案

type="javax.sql.Datasource"

我将stdin重定向到inital tar命令中的split命令,同时将此tar的输出传递给xargs。希望这对其他人有帮助。

答案 1 :(得分:0)

你的命令:

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而不是public static class Facade { static SubsystemA a = new SubsystemA( ); static SubsystemB b = new SubsystemB( ); static SubsystemC c = new SubsystemC( ); public static void Operation1( ) { Console.WriteLine("Operation 1\n" + a.A1( ) + a.A2( ) + b.B1( )); } public static void Operation2( ) { Console.WriteLine("Operation 2\n" + b.B1( ) + c.C1( )); } } 的目录。是的,这不存储文件权限,不适用于目录!那是一个要求吗?