tar 和 gzip 的进出管道

tar 和 gzip 的进出管道

我正在尝试了解如何将命令导入到 gzip、cpio 或 tar 之类的命令中。

有问题的命令属于 ZFS 系统。我在 Ubuntu Linux 10.04.3 上运行 ZFS。

我使用的命令是;

To create a snapshot;
zfs snapshot media/mypictures@20070607

To copy the snapshot to a directory;
zfs send media/mypictures@20070607 > ~/backups/20070607

Then I can also pipe into gzip
zfs send media/mypictures@20070607 | gzip > ~/backups/20070607.gz

这些部分我明白。

但我的第一个问题是,我该怎么做才能接入 tar + gzip?

这?

zfs send media/mypictures@20070607 | tar czvf > ~/backups/20070607.tar.gz

我的另一个问题是如何从 tarball 或 gzip 中获取数据?

我必须使用zfs recieve media/mypictures@20070607 < ~/backups/20070607

那么如果我使用 tar 的话就会是这样吗?

zfs recieve media/mypictures@20070607 | tar xzvf < ~/backups/20070607.tar.gz

任何想法?

答案1

tar期望将文件名列表作为命令行参数给出。据我所知,它不能用于读取匿名管道(它将存储什么作为文件名和文件元数据?)

$ echo aaa | tar cv > f.tar
tar: Cowardly refusing to create an empty archive
Try `tar --help' for more information.

如果您的数据是单个逻辑项或流,则无需使用 tar 之类的工具,它用于将一组单独的文件组合在一起。

否则,您必须先将数据写入文件,然后 tar 该文件,最后删除该文件。

答案2

-f选项指定一个文件,否则输出将转到 stdout。因此,要么删除重定向:

zfs send media/mypictures@20070607 | tar czvf ~/backups/20070607.tar.gz

或者放弃f选择:

zfs send media/mypictures@20070607 | tar czv > ~/backups/20070607.tar.gz

解压也类似。

相关内容