我如何从stdin建立一个tar?

我怎样才能将信息传输到指定文件名称的tar


就像是:

tar cfz foo.tgz -T -

但请记住,这不适用于所有可能的文件名; 您应该考虑--null选项并从find -print0提供tar 。 ( xargs示例不适用于大型文件列表,因为它会生成多个tar命令。)


正如已经指出的geekosaur,也没有必要管的输出findxargs ,因为它有可能管的输出find直接tar使用find ... -print0 | tar --null ... find ... -print0 | tar --null ...

请注意gnutarbsdtar在排除归档文件时的细微差异。

# exclude file.tar.gz anywhere in the directory tree to be tar'ed and compressed
find . -print0 | gnutar --null --exclude="file.tar.gz" --no-recursion -czf file.tar.gz --files-from -
find . -print0 | bsdtar --null --exclude="file.tar.gz" -n -czf file.tar.gz -T -

# bsdtar excludes ./file.tar.gz in current directory by default
# further file.tar.gz files in subdirectories will get included though
# bsdtar: ./file.tar.gz: Can't add archive to itself
find . -print0 | bsdtar --null -n -czf file.tar.gz -T -

# gnutar does not exclude ./file.tar.gz in current directory by default
find . -print0 | gnutar --null --no-recursion -czf file.tar.gz --files-from -

扩展geekosaur的答案:

find /directory | tar -cf archive.tar -T -

你可以使用stdin和-T选项。

请注意,如果您使用某些条件(例如-name选项)过滤文件,则通常需要排除管道中的目录 ,否则tar将处理其所有内容,这不是您想要的。 所以,使用:

find /directory -type f -name "mypattern" | tar -cf archive.tar -T -

如果你不使用-type ,所有匹配"mypattern"的目录内容将被添加!

链接地址: http://www.djcxy.com/p/26255.html

上一篇: How can I build a tar from stdin?

下一篇: Reset local repo to be exactly the same as remote repo