Je dois mettre un fichier Zip à la disposition de tous les visiteurs de mes utilisateurs Windows. J'ai donc créé naïvement un fichier Zip avec la commande Unix Zip (appelons-le madeinlinux.Zip).
Il s’ouvre correctement avec WinRar ou Winzip, mais ceux de mes utilisateurs qui utilisent le traitement standard des fichiers Windows Zip échouent lorsqu’ils essaient de le décompresser. (Windows XP)
J'ai compressé les mêmes données à l'aide du mécanisme Zip intégré à Windows et, du point de vue de Linux, je ne vois aucune différence dans le type de fichier:
$ file madeinlinux.Zip : Zip archive data, at least v2.0 to extract
$ file madeinwindows.Zip : Zip archive data, at least v2.0 to extract
Ils doivent être spécifiques à un fichier Zip compatible Windows.
Est-ce que quelqu'un sait quoi?
Essayez avec:
Zip -9 -y -r -q file.Zip folder/
-9
Indique la vitesse de compression la plus lente (compression optimale, ignore la liste des suffixes)-y
Stocker les liens symboliques en tant que tels dans l'archive Zip, au lieu de compresser et de stocker le fichier référencé par le lien-r
Parcoure la structure de répertoires de manière récursive-q
Mode silencieux7Zip est un outil de compression open source fonctionnant sous Linux, FreeBSD, Mac OS X, BeOS, DOS, Amiga et Windows.
Je le recommande fortement en fonction de la version Windows.
Elle supporte
emballage/déballage: 7z, Zip, GZIP, BZIP2 et TAR
Décompression uniquement: ARJ, CAB, CHM, CPIO, DEB, DMG, HFS, ISO, LZH, LZMA, MSI, NSIS, RAR, RPM, UDF, WIM, XAR et Z.
Zip -Z
définit l'option de compression. -Z store
est le plus trivial, car il ne compresse pas du tout. Ceci est utile lorsque vous utilisez Zip
comme alternative à tar
ou lors du dépannage. Dans ce cas, vous devriez essayer de voir si une archive non compressée est utilisable à partir de Windows. Si cela est utilisable, vous savez que vous devrez choisir une option de compression autre que celle par défaut.
La seule chose qui semble pertinente est-ce
-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.
mais lisez "man Zip" sur votre système avant de partir ailleurs ...
En plus de ce que d’autres ont suggéré, , il est important de porter une attention particulière à vos noms de fichiers et de répertoires , car Windows n’apprécie pas nécessairement le chemin et les noms de fichiers Linux. Parfois, il leur échappe également différemment lors de la compression. Les exemples sont nombreux, mais surtout : fichiers point (. Et ..), fichiers ne contenant que des différences de casse (name.txt et NAME.txt), chemins d'accès absolus (/tmp/file.txt) . Certains autres caractères autorisés dans les noms de fichiers sous Windows peuvent poser des problèmes lorsque l'Explorateur Windows est utilisé pour ouvrir des fichiers. Dans mon cas, ":" le personnage a été décisif, mais il a fallu beaucoup de travail pour le découvrir.
Donc, avant de continuer à utiliser de nombreux paramètres, je vous suggère de suivre une procédure simple:
Localisez le dossier ou le fichier de votre fermeture éclair.
lancer: Zip -9 -r -k Zip-nom- modifiables.Zip/chemin/vers/votre/dossier
Si cela fonctionne, il vaudrait peut-être mieux supprimer les caractères qui ont été supprimés par l'option -k de vos noms de fichiers/répertoires, essayez de compresser normalement. Notez que certains paramètres tels que -k ont des effets secondaires. Dans ce cas, -k est en contradiction avec l'option -q (pour les liens sym).
De plus, l'option -k peut rendre vos noms de fichiers illisibles. Dans mon cas, mes fichiers ont été nommés en fonction du moment de la création (par exemple 10: 55: 39.pdf) pour faciliter la localisation de la notice requise dans les archives, mais l'option -k l'a convertie en 105539.pdf, qui n'est pas facilement lisible par les utilisateurs. J'ai donc changé les noms en 10_55_39.pdf qui s'ouvre sous Windows sans utiliser l'option -k mais reste lisible.
Avait un problème similaire récemment avec les fichiers produits à partir d'un script Perl. Découvert que Windows Zip natif (testé sous Windows 7 uniquement) gère de manière incorrecte les chemins avec une barre oblique et affiche un fichier zip vide. La solution consistait à supprimer la barre oblique avant d'ajouter des fichiers. Certaines versions de la commande linux Zip stockent peut-être des chemins de fichiers avec des barres obliques.
Voici un script python que j'utilise pour compresser certains fichiers. Il a été testé sur Ubuntu et Vista. Un zip généré sur Ubuntu s'ouvre avec la fermeture éclair de Vista.
Je pense que j'avais un problème similaire dans le passé et que c'était parce que le format Zip n'était pas Zip_DEFLATED. Je ne suis pas sûr. Je vais vérifier ça.
J'espère que ça aide
importer un fichier zip importer glob, os, sys class ZipArchive: def Zip_it (self, dirName, files) : dirNamePrefix = dirName + "/ *" comme nom de fichier dans glob.glob (dirNamePrefix): if os.path.isfile (nomfichier) et (pas self.exclude_svn ou ( filename.find (". svn \\") == - 1)): Nom du fichier d'impression nom = nom du fichier [len (self.folder) +1:] self .archive.write (nom_fichier, nom_fichier.zip.Zip_DEFLATED) def exécuté (auto, dossier, nom, exclude_svn): self.exclude_svn = exclude_svn self.folder = dossier self.archive = zipfile.ZipFile (nom + ".zip", "w") os.path.walk (self.folder, ZipArchive.Zip_it, self) self.archive.close () if __== "__main __": if (len (sys.argv) == 1): print "utilisation du dossier zipit [nom] [svn: oui | non]" sinon: name = sys.argv [1] exclude_svn = False if (len (sys.argv)> 2): nom = sys.argv [2] if (len (sys.argv)> 3): exclude_svn = (sys.argv [3] == "non") Arch = ZipArchive () Arch. run (sys.argv [1], name, exclude_svn) print "done"
Il y a probablement un problème dans votre transfert de fichier de Linux à Windows. Si vous utilisez FTP, essayez de définir un transfert binaire (commande bin sous Windows avant le transfert de vos fichiers de Linux à Windows).