Cuando comprimo archivos con el compresor zip incorporado en Mac OSX, resulta en una carpeta adicional titulada "__MACOSX" creada en el zip extraído.
¿Puedo ajustar mi configuración para evitar que se cree esta carpeta o debo comprar una herramienta de compresión de terceros?
ACTUALIZACIÓN : Acabo de encontrar una aplicación gratuita para OSX que resuelve mi problema: " YemuZip "
ACTUALIZACIÓN 2 : YemuZip ya no es freeware
__MACOSX
,.DS_Store
,._fileName
, y todos los demás turds variedad de Mac OS cae en sus archivos. El 'tar' de OSX también hace esto, sin tener en cuenta el principio del mínimo asombro .Respuestas:
Cuando tuve este problema, lo hice desde la línea de comandos:
zip file.zip uncompressed
EDITAR , después de muchos votos negativos: estaba usando esta opción hace algún tiempo y no sé dónde la aprendí, así que no puedo darle una mejor explicación. La respuesta de Chris Johnson es correcta, pero no borraré la mía. Como dice un comentario, es más preciso a lo que pregunta OP, ya que se comprime sin esos archivos, en lugar de eliminarlos de un archivo comprimido. También me resulta más fácil de recordar.
fuente
zip
, que es una aplicación de terceros, entonces el directorio __MACOSX / nunca se crea en primer lugar.zip -rX file.zip uncompressed_directory
Se puede arreglar después del hecho por
zip -d filename.zip __MACOSX/\*
fuente
zip -d filename.zip \*/.DS_Store
find ~ -type f -name '*.zip' -exec zip -d '{}' __MACOSX/\* \;
. Sustituya su punto de partida~
.cleanzip(){ zip -d $1 $2 __MACOSX/\* \*/.DS_Store; }
. Uso:cleanzip file.zip
ocleanzip file.zip MORE_JUNK_FILES
(el segundo parámetro es opcional)Dentro de la carpeta que quieres comprimir, en la terminal:
Donde -X significa: Excluir esos archivos invisibles de recursos de Mac como "_MACOSX" o "._Filename" y .ds almacenar archivos
fuente
Nota: Solo funcionará para la carpeta y el árbol de carpetas posterior en el que se encuentra y debe tener el
*
comodín.fuente
-X
no excluye los archivos .DS_Store. La razón por la que puede funcionar para su aplicación es que solo está comprimiendo*
, que es un comodín que coincide con los archivos que no comienzan con ".". Pruébelo en un directorio que contenga un archivo de puntos, y verá que se incluye.zip -r -X Archive.zip myfolder
en una carpeta todavía da como resultado un archivo zip que contiene el archivo .DS_Store.Este comando lo hizo por mí:
Target.zip
es el archivo zip para crear.Source
es el archivo / carpeta de origen para comprimir. Y el_x
parámetro especifica el archivo / carpeta a no incluir. Si lo anterior no funciona por alguna razón, intente esto en su lugar:fuente
zip
utilidad de línea de comandos nunca crea un__MACOSX
directorio, por lo que el primer fragmento funciona y la-x "__MACOSX"
parte no es necesaria.Estoy usando este Automator Shell Script para arreglarlo después. Se muestra como elemento de menú contextual (haciendo clic con el botón derecho en cualquier archivo que aparezca en Finder).
fuente
zip -d "$p" __MACOSX/\* || true
en su respuesta.Las carpetas no deseadas también se pueden eliminar de la siguiente manera:
Funciona mejor para mi
fuente
-x "*/\__MACOSX"
: ignore __MACOSX como usted menciona.-x "*/\.*"
: ignora cualquier archivo oculto, como .DS_Store.Además, puede crear el Servicio Automator para que sea más fácil de usar en Finder. Verifique el enlace a continuación para ver detalles si lo necesita.
Github
fuente
La
zip
utilidad de línea de comandos nunca crea un__MACOSX
directorio, por lo que puede ejecutar un comando como este:En el resultado a continuación,
a.zip
lo que creé con lazip
utilidad de línea de comandos no contiene un__MACOSX
directorio, pero sía 2.zip
lo creé desde Finder.-x .DS_Store
no excluye.DS_Store
archivos dentro de directorios pero lo-x \*.DS_Store
hace.El archivo de nivel superior de un archivo zip con varios archivos generalmente debería ser un solo directorio, porque si no lo es, algunas utilidades de desarchivado (como
unzip
y7z
, pero no la Utilidad de archivo, The Unarchiverunar
, odtrx
) no crean un directorio contenedor para archivos cuando se extrae el archivo, lo que a menudo hace que los archivos sean difíciles de encontrar, y si se extraen varios archivos como ese al mismo tiempo, puede ser difícil saber qué archivos pertenecen a qué archivo.Archive Utility solo crea un
__MACOSX
directorio cuando crea un archivo en el que al menos un archivo contiene metadatos como atributos extendidos, marcas de archivo o una bifurcación de recursos. El__MACOSX
directorio contiene archivos AppleDouble cuyo nombre de archivo comienza con los._
que se utilizan para almacenar metadatos específicos de OS X. Lazip
utilidad de línea de comandos descarta metadatos como atributos extendidos, marcas de archivo y bifurcaciones de recursos, lo que también significa que se pierden metadatos como etiquetas y que los alias dejan de funcionar, porque la información en un archivo de alias se almacena en una bifurcación de recursos.Normalmente, puede descartar los metadatos específicos de OS X, pero puede ver qué archivos de metadatos contienen
xattr -l
.xattr
también incluye bifurcaciones de recursos y marcas de archivo, porque aunque en realidad no se almacenan como atributos extendidos, se puede acceder a ellos a través de la interfaz de atributos extendidos. Tanto Archive Utility como lazip
línea de comandos descartan ACL.fuente
No puedes
Pero lo que puede hacer es eliminar esas carpetas no deseadas después de comprimirlas. La línea de comando
zip
toma diferentes argumentos donde uno, el-d
, es para eliminar contenidos basados en una expresión regular. Entonces puedes usarlo así:fuente
no comprima ningún archivo oculto:
con esta pregunta, debería ser como:
Sin embargo, debe decirse que el comando zip se ejecuta en la terminal simplemente comprimiendo el archivo, no comprime ningún otro. Entonces haz esto, el resultado es el mismo:
fuente
__MACOSX
no comienza con.
¿Te refieres a la
zip
herramienta de línea de comandos o al comando Comprimir del Finder?Para
zip
, puedes probar la--data-fork
opción. Si eso no lo hace, puede intentarlo--no-extra
, aunque parece ignorar otros metadatos de archivo que podrían ser valiosos, como uid / gid y tiempos de archivo.Para el comando Comprimir del Finder, no creo que haya ninguna opción para controlar su comportamiento. Es por el simple caso.
La otra herramienta, y tal vez la que el Finder realmente usa debajo del capó, es
ditto
. Con las-c -k
opciones, crea archivos zip. Con esta herramienta, se puede experimentar con--norsrc
,--noextattr
,--noqtn
,--noacl
y / o, simplemente, dejar fuera de la--sequesterRsrc
opción (que, de acuerdo con la página del manual, puede ser responsable de la__MACOSX
subdirectorio). Aunque, tal vez la ausencia de--sequesterRsrc
simplemente significa usar el formato AppleDouble, lo que crearía archivos ._ por todas partes en lugar de un__MACOSX
directorio.fuente
Tengo una mejor solución después de leer todas las respuestas existentes. Todo podría hacerse mediante un flujo de trabajo con un solo clic derecho. SIN software adicional, SIN complicados elementos de línea de comandos y SIN trucos de shell.
El flujo de trabajo del automatizador:
Paso 2: Ejecute el comando Shell, con la entrada como parámetros. Copiar el comando a continuación.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
¡Guárdalo y listo! Simplemente haga clic derecho en la carpeta o en la mayor parte de los archivos y elija el flujo de trabajo del menú de servicios. El archivo sin metadatos se creará junto con.
fuente
Así es como evito el
__MACOSX
directorio cuando comprimo archivos con eltar
comando:$ cd dir-you-want-to-archive $ find . | xargs xattr -l # <- list all files with special xattr attributes ... ./conf/clamav: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/global: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55 ./conf/web_server: com.apple.quarantine: 0083;5a9018b1;Safari;9DCAFF33-C7F5-4848-9A87-5E061E5E2D55
Eliminar el atributo primero:
find . | xargs xattr -d com.apple.quarantine
Ejecute
find . | xargs xattr -l
nuevamente, asegúrese de que ningún archivo tenga el atributo xattr. entonces eres bueno para ir:tar cjvf file.tar.bz2 dir
fuente