Я использую GNU tar. Он может автоматически определять тип сжатия при сжатии / распаковке файлов. Но мне нужно распаковать архив из stdin и тип сжатия неизвестен. Я заметил, что tar может дать мне правильное предложение вроде:
tar: Archive is compressed. Use -z option
Но я хочу, чтобы tar использовал эту опцию сжатия автоматически, без запроса ввода этого аргумента. Как я могу это сделать? Почему бы просто не распаковать tar, поскольку он уже знает тип сжатия?
Спасибо!
linux
compression
tar
Джеймс
источник
источник
tar
он не знает, к какому типу данных он относится,stdin
до тех пор, пока не прочитает их, и к тому времени уже слишком поздно вызывать программу распаковки. Он поддерживает gzip, bzip2 и другие. Обойти эту проблему нелегко (придется буферизовать данные), поэтому он просто говорит вам попробовать еще раз.fork()
/exec()
метод трубу данных через распаковывать утилиту. Утилита будет читать изstdin
канала, и первые 4K теперь будут отсутствовать. После прочтения невозможно вернуть данные обратно в канал.cat buffer - | gunzip
. (В качестве альтернативы можно использовать неблокирующий ввод-вывод, чтобы избежать необходимости в дополнительном процессе.)Ответы:
Это не тот ответ, который вы хотите услышать, но он не поддерживается GNU tar в соответствии с его руководством:
- 8.1.1 Создание и чтение сжатых архивов
источник
Наконец, я понял, что причина, по которой я не могу позволить tar обнаруживать и распаковывать архив из stdin, заключается в том, что я использую GNU tar. BSD tar может сделать это автоматически без проблем. Поэтому я решил использовать bsdtar вместо tar в моем сценарии.
источник