我正在尝试了解如何将命令导入到 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
解压也类似。