Ваш ответ описывает именованный канал, который сжимает любой ввод, который он получает. Если вы передадите несжатый архив каталога (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
.