Я должен сделать zip-файл доступным для всех моих посетителей пользователей Windows, таким образом, я наивно произвел zip-файл с командой zip Unix (давайте назовем ее madeinlinux.zip).
Это открывается успешно WinRar или Winzip, но те из моих пользователей, которые используют стандартный zip-файл Windows, обрабатывающий отказ опыта при попытке разархивировать его. (Windows XP)
Я сжал те же данные с помощью Windows встроенная zip mecanism, и с точки зрения 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-файл.
Кто-либо знает что?
Только вещь, которая выглядит релевантной, является этим
-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.
но действительно считайте "zip человека" в Вашей системе прежде, чем идти куда-либо еще...
7zip инструмент сжатия с открытым исходным кодом, который работает над Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga и Windows.
Я настоятельно рекомендовал бы его на основе версии для Windows.
Это поддерживает
упаковка / распаковка: 7z, ZIP, GZIP, BZIP2 и TAR
Распаковка только: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, об/мин, UDF, WIM, XAR и Z.
Вот сценарий Python, который я использую для архивирования некоторых файлов. Это было протестировано на человечности и 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"
zip -Z
устанавливает опцию сжатия. -Z store
самый тривиальный, поскольку он не сжимается вообще. Это полезно, когда Вы используете zip
как альтернатива для tar
, или при поиске и устранении неисправностей. В этом случае необходимо попытаться видеть, применим ли несжатый архив из Windows. Если это применимо, Вы знаете, что необходимо будет выбрать опцию сжатия не по умолчанию.