Почему tgz можно открыть на Linux, но нельзя на Windows?

Почему tgz можно открыть на Linux, но нельзя на Windows?

Я получил файл Tar/GZipp, созданный на встроенном устройстве Linux.

Файл можно прекрасно извлечь на рабочем столе Linux, если я запущу что-то вроде tar zxf myFile.tgz. Файл извлекается во что-то вроде

dir1/
  file1
  file2
dir2/
  file1
  file2
  subdir1/
    file1

...но я подозреваю, что конкретное содержимое файла и его структура не имеют значения.

Когда я пытаюсь извлечь этот же файл в Windows (используя 7-Zip или WinZip), я получаю:

  myFile/
    <extensionless file with temp-looking name e.g. "logs_xqUt09">

Вероятно, имеет значение, что этот каталог верхнего уровня называется " myFile", когда .tgzя получил сообщениесамназван myFile.tgz... но я не знаю наверняка, является ли это чем-то большим, чем просто совпадением.

Я немного покопался в SuperUser и нашел несколько связанных с этим проблем, одна из которых предполагала, что7-Зипобрабатывает .tgzфайлы лучше, чем WinZip, но, видимо, не в этой ситуации.

Кто-нибудь знает, что дает? Почему a может .tgzбыть полностью извлечено под Linux, но не под Windows? Какие могут быть обходные пути?

Если я переименую этот файл без расширения в .tarфайл, точто .tarфайл можно извлечь с помощью 7-Zip и/или WinZip.

Мне все равно хотелось бы понять, что происходит, и есть ли обходной путь, не требующий ручного переименования файлов, поскольку в идеале исходный .tgzфайл, доставленный встроенным устройством, должен поддаваться извлечению в Linux и Windows.

решение1

tgz (tar.gz) — это двухуровневый архив. Сначала поток файлов сохраняется как tar. Затем файл tar сжимается с помощью gzip. Если вы извлекаете файл gzip, вы всегда получите один файл — файл без расширения с именем, похожим на временный, в случае 7-zip. Этот файл можно «распаковать» с помощью tar или снова с помощью 7-zip.

кроме того, поток tar содержит метаданные, такие как права доступа к файлам, идентификатор группы + идентификатор пользователя, xattrs или контекст selinux (и, возможно, символические ссылки), которые теряются в файловой системе Windows, распаковка файлов Linux может завершиться неудачей или вызвать проблемы из-за набора символов ASCII в именах файлов (все символы, кроме /разрешенных в Linux). обычно не имеет смысла извлекать архив tar на диск Windows

решение2

Почему?

Потому что Microsoft пока этого не встроила.

Типы файлов поддерживаются операционной системой только в том случае, если в нее добавлены необходимые инструкции, указывающие, как обрабатывать файлы.

.tag.gz имеет долгую историю использования в системах *nix, но .zip и другие пакеты гораздо популярнее в Windows, поэтому реальной потребности в поддержке этих типов пакетов в Windows не было.

На что-либо большее мы ответить не можем, поскольку мы не те люди, которые пишут Windows.

решение3

Полностью .tgzизвлекаемый в системе Linux, потому что tarбыл создан AT&T Bell Laboratories специально для Unix и Unix-подобных операционных систем. И gzipэто просто алгоритм сжатия, который был разработан спустя годы после того, как tarбыл разработан.

То же самое обоснование применимо ко всем другим расширениям файлов, которые поддерживаются в одной ОС, но не поддерживаются в другой. Например, вы не можете использовать файл .dmgв Windows, и вы не можете использовать файл .msiв macOS.

Большинство людей выбирают этот tar.gzвариант в Linux/Unix, поскольку tarон сохраняет атрибуты и разрешения файлов Unix и объединяет все файлы для архивации. Затем gzipиспользуется для сжатия.

Эта zipопция сохраняет атрибуты файла MSDOS, затем сжимает каждый файл по отдельности, а затем объединяет каждый отдельный файл в один файл.

В зависимости от ситуации, вместо тарирования и сжатия файла на встроенном устройстве вы можете использовать команду zip.

Связанный контент