web-dev-qa-db-ja.com

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

そして私のもう1つの質問は、どのようにしてtarballまたはgzipからデータを取得するかということです。

zfs recieve media/mypictures@20070607 < ~/backups/20070607

それで、もし私がtarを使っていたら、これだけでしょうか?

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

何か案が?

11
ianc1215

tarは、コマンドライン引数としてファイル名のリストが与えられることを期待しています。私の知る限り、匿名パイプラインの読み取りには使用できません(ファイル名とファイルメタデータとして何を格納しますか?)

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

データが単一の論理項目またはストリームである場合、一連の個別のファイルをグループ化するために使用されるtarのようなものを使用する必要はありません。

それ以外の場合は、最初にデータをファイルに書き込み、ファイルをtarし、次にファイルを削除する必要があります。

10
RedGrittyBrick

-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

同様に、解凍すると。