Трубопроводы из смолы и gzip


11

Я пытаюсь понять, как передать из команды что-то вроде gzip, cpio или tar.

Указанные команды относятся к системе ZFS. Я использую ZFS на Ubuntu Linux 10.04.3.

Команды, с которыми я работаю:

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

И другой мой вопрос: как мне получить данные из архива или gzip?

Я должен использовать zfs recieve media/mypictures@20070607 < ~/backups/20070607

Так было бы так, если бы я использовал смолу?

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

Есть идеи?

Ответы:


10

tarожидает получить список имен файлов в качестве аргументов командной строки. Насколько я знаю, его нельзя использовать для чтения анонимного конвейера (что он будет хранить как имя файла и метаданные файла?)

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

Если ваши данные представляют собой один логический элемент или поток, нет необходимости использовать что-то вроде tar, который используется для группировки набора отдельных файлов.

В противном случае вам придется сначала записать данные в файл, скопировать файл, а затем удалить файл.


В самом деле? Я думал, что tar был просто еще одной формой сжатия. Так пропустить tar и просто gzip?
ianc1215,

3
Да, просто используйтеzfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
RedGrittyBrick

2
Tar НЕ ожидает список имен файлов, если вы не укажете -fопцию (tar также принимает fбез "-").
drevicko

1
@drevicko: контекст вопроса - создание архива tar. Список файлов, который я имею в виду - это список файлов (и / или каталогов), которые должны быть включены в письменный архив. Например: cd /etc; TAPE=/tmp/rgb.tar tar c hosts passwdгде список файловhosts passwd
RedGrittyBrick

2
@RedGrittyBrick, но суть вопроса в том, чтобы использовать tar из канала, то есть: нет списка файлов. То, что tar ожидает, что список файлов не соответствует действительности. Проблема в том, что он ожидает (одно) имя выходного файла, когда OP указывает f, а он не предоставил его.
drevicko

10

-fПараметр определяет файл, в противном случае вывод идет на стандартный вывод. Итак, либо сбросьте перенаправление:

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

Или опустите fопцию:

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

Точно так же с непересекающимися.


Это на самом деле работает? И то echo "hello" | tar czvf foo.tar.gzи другое echo "hello" | tar czv > foo.tar.gzне получится для меня.
425 по
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.