This link a plus d'informations que tout ce que j'ai pu trouver sur le net. Même la source zip n'a rien. Copier la section pertinente pour la postérité. Ce correctif n'est pas vraiment sur la documentation de ce format, qui va juste montrer comment pathétique (lire inexistant) la documentation actuelle est.
# external_attr is 4 bytes in size. The high order two
# bytes represent UNIX permission and file type bits,
# while the low order two contain MS-DOS FAT file
# attributes, most notably bit 4 marking directories.
if node.isfile:
zipinfo.compress_type = ZIP_DEFLATED
zipinfo.external_attr = 0644 << 16L # permissions -r-wr--r--
data = node.get_content().read()
properties = node.get_properties()
if 'svn:special' in properties and \
data.startswith('link '):
data = data[5:]
zipinfo.external_attr |= 0120000 << 16L # symlink file type
zipinfo.compress_type = ZIP_STORED
if 'svn:executable' in properties:
zipinfo.external_attr |= 0755 << 16L # -rwxr-xr-x
zipfile.writestr(zipinfo, data)
elif node.isdir and path:
if not zipinfo.filename.endswith('/'):
zipinfo.filename += '/'
zipinfo.compress_type = ZIP_STORED
zipinfo.external_attr = 040755 << 16L # permissions drwxr-xr-x
zipinfo.external_attr |= 0x10 # MS-DOS directory flag
zipfile.writestr(zipinfo, '')
En outre, this link a également ce qui suit. Ici, l'octet de poids faible signifie probablement l'octet le plus à droite (le plus bas) des quatre octets. Donc, celui-ci est pour MS-DOS et peut probablement être laissé à zéro autrement.
attributs de fichier externe: (4 octets)
The mapping of the external attributes is
host-system dependent (see 'version made by'). For
MS-DOS, the low order byte is the MS-DOS directory
attribute byte. If input came from standard input, this
field is set to zero.
En outre, le fichier source unix/unix.c dans les sources pour le programme zip de InfoZIP, téléchargé à partir Debian's archives a les éléments suivants dans les commentaires.
/* lower-middle external-attribute byte (unused until now):
* high bit => (have GMT mod/acc times) >>> NO LONGER USED! <<<
* second-high bit => have Unix UID/GID info
* NOTE: The high bit was NEVER used in any official Info-ZIP release,
* but its future use should be avoided (if possible), since it
* was used as "GMT mod/acc times local extra field" flags in Zip beta
* versions 2.0j up to 2.0v, for about 1.5 years.
*/
Donc, en prenant tout cela ensemble, il semble que seul le deuxième octet le plus haut est réellement utilisé, au moins pour Unix.
EDIT: J'ai demandé à propos de l'aspect Unix de ceci sur Unix.SX, à la question "The zip format's external file attribute". On dirait que j'ai eu quelques mauvaises choses. Plus précisément, les deux premiers octets sont utilisés pour Unix.
Ce serait plus lisible si le tampon, le nom et les octets ont été définis dans l'exemple. –
sûr, ajouté quelques exemples de définitions. – Tom
Pour python 3, vous écrivez ceci '0o777 << 16' –