Как из ZIP-архива при помощи bsdtar в потоковом режиме (через pipe) конвертировать в tarball-файл с выводом на stdout?

Необходимо в потоковом режиме считывать содержимое удалённого ZIP-архива, считывая его на другой стороне как чистый tarball.

Сегодня узнал, что ZIP-архив при помощи bsdtar можно налету (через pipe) распаковывать на диск:
cat file.zip | bsdtar -xvf- -C /path/to/target_dir

Вместо распаковки файлов хотел бы получить архив tar, в потоковом режиме, для дальнейших манипуляций.
  • Вопрос задан
  • 738 просмотров
Решения вопроса 1
2ord
@2ord Автор вопроса
Путём долгих проб и ошибок, а также штудирования документации bsdtar (не GNU/tar, а тот, который работает с libarchive) я таки добился своего:
wget -qO- http://loookup.com/img/flags/zip/cflags2.zip | bsdtar -cf - @- | gzip > converted.tar.gz


В общем, сценарии могут быть следующими:

Конвейерная обработка zip-архива различными фильтрами, включая передачу по сети
cat file.zip | bsdtar -cf - @- | filter1 | filter2 | filter3


Перепаковка из zip в tar
bsdtar -czf new.tar.gz @old.zip
или так:
bsdtar -cf - @old.zip | gzip > new.tar.gz

Дополнительные ссылки
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
zip и tar не умеют работать потоками, они умеют работать с файлами.
Но с потоками умеет работать gzip, поэтому есть подозрение, что это не zip архив.

Попробуйте
gunzip -c file.zip
gzip -d -c file.zip

P.S. еще есть bzip2 и cpio, которые работают с потоком.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы