Как создать zip-файл, совместимый с Windows под Linux

Мне нужно сделать zip-файл доступным для всех посетителей моих пользователей Windows, поэтому я наивно создал zip-файл с помощью команды Unix zip (назовем ее madeinlinux.промелькнуть.)

он успешно открывается с помощью WinRar или Winzip, но те из моих пользователей, которые используют стандартный опыт обработки файлов Windows zip при попытке распаковать его. (Windows XP)

Я сжал те же данные, используя встроенный zip-mecanism Windows, и с точки зрения Linux я не вижу никаких разница в типе файла:

$ file madeinlinux.zip :  Zip archive data, at least v2.0 to extract
$ file madeinwindows.zip : Zip archive data, at least v2.0 to extract

они должны быть чем-то конкретным для совместимого с Windows zip-файла.

кто-нибудь знает что?

16
задан studiohack
21.12.2022 12:23 Количество просмотров материала 3223
Распечатать страницу

8 ответов

попробовать с:

zip -9 -y -r -q file.zip folder/
  • -9 указывает самую медленную скорость сжатия (оптимальное сжатие, игнорирует список суффиксов)
  • -y хранить символические ссылки как таковые в zip-архиве, вместо сжатия и хранения файла, на который ссылается ссылка
  • -r путешествуйте по структуре каталогов рекурсивно
  • -q тихий режим
23
отвечен Igor Fobia 2022-12-22 20:11

в 7-Zip это инструмент сжатия с открытым исходным кодом, который работает на Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga и Windows.

Я настоятельно рекомендую его на основе версии windows.

поддерживает

упаковка / распаковка: 7z, ZIP, GZIP, BZIP2 и TAR

распаковка только: шнур ARJ, такси, кхм, команда cpio, deb, тем употр, СТС, ИСО, ЛЖ, ЛЗМА, компания MSI, НСИ, РАР, об / мин, ОДС, УИМ, XAR ПО и З.

11
отвечен Bruce McLeod 2022-12-22 22:28

zip -Z задаются параметры компрессии. -Z store является самым тривиальным, так как он вообще не сжимается. Это полезно при использовании zip в качестве альтернативы tar, или при устранении неполадок. В этом случае вы должны попытаться увидеть, если несжатый архив можно использовать из Windows. Если что is можно использовать, вы знаете, что вам придется выбрать опцию сжатия не по умолчанию.

8
отвечен MSalters 2022-12-23 00:45

единственное, что выглядит актуальным, это

-k - Attempt  to  convert  the  names  and paths to conform to MSDOS, store only the MSDOS attribute (just the user write attribute from UNIX), and mark the entry as made under
MSDOS (even though it was not); for compatibility with PKUNZIP under MSDOS which cannot handle certain names such as those with two dots.

но прочитайте "Man zip" в вашей системе, прежде чем идти куда-либо еще...

6
отвечен Dan Rosenstark 2022-12-23 03:02

В дополнение к тому, что другие предлагали, важно обратить внимание на имена файлов и каталогов Как Windows, не обязательно, как Linux путь к файлу и имена. Иногда он также избегает их по-разному при застегивании. Примеров множество, но самое главное Dot-файлов (. и. .), файлы только с различиями регистра (имя.txt и имя.txt), абсолютные пути к файлам (/tmp/file.txt). Некоторые другие символы, которые разрешены в именах файлов на Windows, может вызывают проблемы, когда Проводник Windows используется для открытия файлов. В моем случае": "персонаж был нарушителем сделки, но потребовалось много работы, чтобы это выяснить.

поэтому, прежде чем приступить к использованию многих параметров, я предлагаю выполнить простую процедуру:

  1. найдите папку или файл архивирования.

  2. run:zip -9-r-k zip-измененные имена.молния /путь/к/папке

  3. обратите внимание на что консоль выплевывает. в моем случае": "в именах файлов были удалены.
  4. переместите zip-файл на компьютер с windows и попытайтесь открыть его.

Если это работает, вам может быть лучше удалить символы, которые были удалены опцией - k из ваших имен файлов / каталогов, попробуйте пронестись нормально. обратите внимание, что некоторые параметры, такие как-k, имеют побочные эффекты. в этом случае-k противоречит опции-q (для sym-ссылок).

также - опция k может сделать имена файлов нечитаемыми. В моем случае мои файлы были названы на основе времени создания (например, 10:55:39.pdf) для облегчения поиска нужной записи из архивов, но опция-k превратила ее в 105539.pdf, который не легко читается пользователями. Поэтому я изменил имена на 10_55_39.pdf, который открывается в Windows без использования опции-k, но все еще читается.

4
отвечен Shakus 2022-12-23 05:19

недавно была аналогичная проблема с файлами, созданными из скрипта perl. Обнаружено, что собственный zip-архив windows (только для проверенных Windows 7) неправильно обрабатывает пути с косой чертой и отображает пустой zip-файл. Решением было удалить косую черту перед добавлением файлов. Возможно, некоторые версии Linux zip команды хранят пути к файлам с ведущими косыми чертами.

3
отвечен Nicholas Hardy 2022-12-23 07:36

вот скрипт python, который я использую для zip некоторых файлов. Он был протестирован на ubuntu и Vista. Zip генерируется на Ubuntu открывается с застежкой-молнией Vista.

Я думаю, что у меня была подобная проблема в прошлом, и это было потому, что формат zip не был ZIP_DEFLATED. Я не уверена. Я обязательно проверю это.

надеюсь, это поможет

import zipfile
import glob, os, sys

class ZipArchive:

    def zip_it(self, dirName, files):
        dirNamePrefix = dirName+"/*"
        for filename in glob.glob(dirNamePrefix):
            if os.path.isfile(filename) and (not self.exclude_svn or (filename.find(".svn\")==-1)):
                print filename
                name = filename[len(self.folder)+1:]
                self.archive.write(filename, name, zipfile.ZIP_DEFLATED)

    def run(self, folder, name, exclude_svn):
        self.exclude_svn = exclude_svn
        self.folder = folder
        self.archive = zipfile.ZipFile(name+".zip", "w")
        os.path.walk(self.folder, ZipArchive.zip_it, self)
        self.archive.close()

if __name__ == "__main__":
    if (len(sys.argv)==1):
        print "usage zipit folder [name] [svn:yes|no]"
    else:
        name = sys.argv[1]
        exclude_svn = False

        if (len(sys.argv)>2): name = sys.argv[2]
        if (len(sys.argv)>3): exclude_svn = (sys.argv[3]=="no")

        arch = ZipArchive()
        arch.run(sys.argv[1], name, exclude_svn)
        print "done"

1
отвечен luc 2022-12-23 09:53

вероятно, проблема в переносе файлов из Linux в Windows. Если вы используете FTP, попробуйте установить двоичную передачу (команда bin в Windows, перед переносом ваших файлов из Linux в Windows).

0
отвечен Luis Andrés García 2022-12-23 12:10

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх