Когда я бегу
tar -cvzf archive.tgz file1 file2 ; rm file1 file2
он обычно создает сжатый tarball, но как возможно, что
tar -xvf archive.tgz
возвращает мне несжатые файлы? Я всегда думал, что потребуется флаг -z.
Ваша реализация tar
, вероятно, GNU
, обнаруживает, что файл, переданный как параметр, сжимается.
В основном используемые tar
реализации в настоящее время, GNU tar
и busybox
, ищут первые байты файла, а также магическое число, чтобы выяснить, сжата ли она и использовать алгоритм сжатия.
Реализации tar
найденные в коммерческих Unix, основанных на исходном коде AT & T, в первую очередь не поддерживают флаг -z
. Одним из примечательных исключений является Solaris 11 tar
которое добавлено это расширение, включая возможность обнаружения формата файла.
Star представила автоматизированное обнаружение сжатия и автоматическую декомпрессию aprox. 20 лет назад.
В эти дни некоторые другие реализации tar, такие как gtar, скопировали эту идею.
BTW: звезда понимает магические числа в сжатом потоке, чтобы обнаружить правильный метод декомпрессии. Также обратите внимание, что сообщается, что gtar завершился неудачей, когда сжатый архив считывается из stdin
вместо указанного файла.
Опция -z
не требуется в двух хорошо известных реализациях tar: GNU tar и BSD tar (aka libarchive ). Обнаружение требуемого алгоритма сжатия является тривиальным, если проверить первые несколько байтов входного файла.
Независимо от того, используете ли вы одну или другую из этих реализаций, во многом зависит от используемой операционной системы: систем на базе Linux или систем BSD (включая OSX).
Я кратко изложил детали, когда эти функции были представлены на моей странице о tar и переносимости .