Исправьте, используя gzip с именованными каналами - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь создать именованный канал, который может взять каталог в качестве входных данных и поместить его в архив tar.gz. Я пытался сделать что-то вроде этого:

mkfifo channel
gzip -9 -c < channel > out.tar.gz

Но это только принимает текстовые данные, такие как

cat myfile > channel

Можно ли как-то передать каталог в этот канал или изменить его, чтобы он мог принимать его в качестве аргумента? Спасибо.

Ответы [ 2 ]

1 голос
/ 04 марта 2020

Ваш ответ описывает именованный канал, который сжимает любой ввод, который он получает. Если вы передадите несжатый архив каталога (a .tar) в него, он сожмет его в сжатый архив (a .tgz).

Кроме того, любая другая строка в качестве ввода будет сжата с использованием this:

$ echo "hello world" > channel
$ zcat out.tar.gz

Это напечатало бы hello world, и файл out.tar.gz не был бы правильным .tgz (или .tar.gz, который является просто более длинной формой).

Ваш исходный вопрос звучал больше, как будто вы хотели бы иметь в качестве входных данных каталог (а не его архив). Это может означать путь к каталогу. Вы можете добиться этого так:

read dirpath < channel; tar cfz out.tgz "$dirpath"

Это будет работать до тех пор, пока что-то не будет прочитано из канала.

И в другой оболочке вы можете предоставить каталог для архива:

echo path/to/directory > channel

Затем начнет работать первая оболочка, сжимает именованный каталог и создает файл out.tgz.

0 голосов
/ 01 марта 2020

Решение было таким же простым, как

tar cf - MyDirectory/ > channel

Канал, который я использовал, был таким же.

...