Это происходит потому, что некоторые инструменты Windows, очевидно, используют обратную косую черту (\
) в качестве разделителя, где они должны использовать прямую косую черту (/
). Обратная косая черта в Unix может быть частью имени файла или каталога.
,Спецификация формата файла ZIP (версия: 6.3.5, когда я пишу это, исправлено 20 ноября 2018 года) гласит:
4.4.17.1 Имя файла с необязательным относительным путем.
Сохраненный путь НЕ ДОЛЖЕН содержать букву диска или устройства или начальную косую черту. Все косые черты ДОЛЖНЫ быть косыми чертами /
в противоположность косым чертам \
для совместимости с файловыми системами Amiga и UNIX и т.д. Если ввод поступил со стандартного ввода, поле имени файла отсутствует.
Этот файл упоминается Microsoft в документе « Смягчение последствий: ZipArchiveEntry.FullName
Path Separator:
Начиная с приложений, предназначенных для .NET Framework 4.6.1, разделитель пути используется в ZipArchiveEntry.FullName
изменено с обратной косой черты (\
), использовавшейся в предыдущих версиях .NET Framework, на прямую косую черту (/
). [...]
Влияние
Это изменение приводит реализацию .NET в соответствие с разделом 4.4.17.1 .Формат файла ZIP Спецификация и позволяет.ZIP-архивы для распаковки в системах, отличных от Windows.
Распаковка zip-файла, созданного приложением, которое нацелено на предыдущую версию .NET Framework в операционных системах, отличных от Windows, таких как Macintosh, не может сохранить структуру каталогов. Например, на Macintosh он создает набор файлов, имя файла которых объединяет путь к каталогу, любые символы обратной косой черты (\
) и имя файла. В результате структура каталогов распакованных файлов не сохраняется.
Обратите внимание, что проблема может существовать, если архиватор использовал какую-то старую версию .NET Framework или вообще не использовал ее, а реализовал свой собственный (независимый) подход к zip-файлам.
С rar может возникнуть та же проблема: Unrar создает файлы с обратным слешем в именах вместо правильной иерархии каталогов.
Вы можете найти этот вопрос в Unix & Linux SE полезным: Преобразование созданного в Windows ZIP в Linux (проблема с внутренними путями). Мой (несколько экспериментальный) подход заключается в этом ответе.