macos - que - eliminar carpeta no se puede encontrar el archivo especificado
Comprimir comprimir Mac sin la carpeta__MACOSX? (12)
Cuando comprime archivos con el compresor zip incorporado en Mac OSX, da como resultado una carpeta extra llamada "__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
¿Te refieres a la herramienta de línea de comando zip
o al comando Compress del Finder?
Para zip
, puedes probar la opción --data-fork
. Si eso no funciona, puede probar --no-extra
, aunque eso parece ignorar otros metadatos de archivos que pueden ser valiosos, como uid / gid y file times.
Para el comando Compress del Finder, no creo que haya ninguna opción para controlar su comportamiento. Es para el caso simple.
La otra herramienta, y tal vez la que el Buscador realmente usa debajo del capó, es ditto
. Con las opciones -c -k
, crea archivos comprimidos. Con esta herramienta, puede experimentar con --norsrc
, --noextattr
, --noqtn
, --noacl
y / o simplemente dejar fuera de la opción --sequesterRsrc
(que, de acuerdo con la página del manual, puede ser responsable del subdirectorio __MACOSX
) Aunque, tal vez la ausencia de --sequesterRsrc
simplemente significa usar AppleDouble Format, que crearía archivos ._ por todo el lugar en lugar de un directorio __MACOSX
.
Así es como evito el directorio __MACOSX
cuando comprime archivos con el comando tar
:
$ 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
Ejecutar find . | xargs xattr -l
find . | xargs xattr -l
find . | xargs xattr -l
nuevamente, asegúrese de que ningún archivo tenga el atributo xattr. entonces estás listo para ir:
tar cjvf file.tar.bz2 dir
Cuando tuve este problema, lo hice desde la línea de comando:
zip file.zip uncompressed
EDITAR , después de muchas viñetas: utilicé esta opción hace algún tiempo y no sé dónde la aprendí, así que no puedo darle una mejor explicación. La answer Chris Johnson es correcta, pero no borraré la mía. Como dice un comentario, es más preciso lo que OP está pidiendo, ya que se comprime sin esos archivos, en lugar de eliminarlos de un archivo comprimido. Me resulta más fácil recordarlo también.
Este comando lo hizo por mí:
zip -r Target.zip Source -x "*.DS_Store"
Target.zip
es el archivo zip para crear. Source
es el archivo / carpeta de origen para cerrar. Y el parámetro _x
especifica el archivo / carpeta para no incluir. Si lo anterior no funciona por alguna razón, intente esto en su lugar:
zip -r Target.zip Source -x "*.DS_Store" -x "__MACOSX"
Estoy usando este script de Automator Shell para solucionarlo. Se muestra como un elemento de menú contextual (haciendo clic con el botón derecho en cualquier archivo que aparezca en Finder).
while read -r p; do
zip -d "$p" __MACOSX//* || true
zip -d "$p" /*/.DS_Store || true
done
- Crear un nuevo servicio con Automator
- Seleccione "Archivos y carpetas" en "Finder"
- Agregue una "Acción de script de shell"
La utilidad de línea de comando zip
nunca crea un directorio __MACOSX
, por lo que puede ejecutar un comando como este:
zip directory.zip -x /*.DS_Store -r directory
En el siguiente resultado, a.zip
que creé con la utilidad de línea de comandos zip
no contiene un directorio __MACOSX
, pero sí a 2.zip
que creé desde Finder.
$ touch a
$ xattr -w somekey somevalue a
$ zip a.zip a
adding: a (stored 0%)
$ unzip -l a.zip
Archive: a.zip
Length Date Time Name
-------- ---- ---- ----
0 01-02-16 20:29 a
-------- -------
0 1 file
$ unzip -l a/ 2.zip # I created `a 2.zip` from Finder before this
Archive: a 2.zip
Length Date Time Name
-------- ---- ---- ----
0 01-02-16 20:29 a
0 01-02-16 20:31 __MACOSX/
149 01-02-16 20:29 __MACOSX/._a
-------- -------
149 3 files
-x .DS_Store
no excluye los archivos .DS_Store
dentro de los directorios, pero -x /*.DS_Store
sí -x /*.DS_Store
hace.
El archivo de nivel superior de un archivo comprimido con varios archivos generalmente debe ser un solo directorio, porque si no lo está, algunas utilidades de desinstalación (como unzip
y 7z
, pero no Archive Utility, The unar
, dtrx
o dtrx
) no crean un dtrx
. contiene un directorio para los 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 al mismo tiempo, puede ser difícil saber qué archivos pertenecen a qué archivo.
Archive Utility solo crea un directorio __MACOSX
cuando crea un archivo en el que al menos un archivo contiene metadatos, como atributos extendidos, indicadores de archivos o una bifurcación de recursos. El directorio __MACOSX
contiene archivos AppleDouble cuyo nombre de archivo comienza con ._
que se usan para almacenar metadatos específicos de OS X. La utilidad de línea de comandos zip
descarta metadatos como atributos extendidos, indicadores de archivos y bifurcaciones de recursos, lo que también significa que los metadatos como etiquetas se pierden 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 para ver qué archivos de metadatos contienen, puede usar xattr -l
. xattr
también incluye información sobre herramientas y banderas de archivos, porque a pesar de que 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 la utilidad de línea de comando zip
descartan ACL.
Las carpetas no deseadas también se pueden eliminar de la siguiente manera:
zip -d filename.zip "__MACOSX*"
Funciona mejor para mí
No puedes.
Pero lo que puede hacer es eliminar esas carpetas no deseadas después de comprimirlas. El zip
línea de comandos toma diferentes argumentos donde uno, el -d
, es para eliminar contenidos basados en una expresión regular. Entonces puedes usarlo así:
zip -d filename.zip __MACOSX//*
Ok, después de detenerme en esto encontré esta solución, desde la terminal:
zip -r -X Archive.zip *
Donde-X significa: Excluya esos archivos de recursos de Mac invisibles como "_MACOSX" o "._Filename" y archivos de tienda .ds
Puede zip -d filename.zip __MACOSX//*
después del hecho por zip -d filename.zip __MACOSX//*
Tengo una mejor solución después de leer todas las respuestas existentes. Todo podría hacerse mediante un flujo de trabajo en un solo clic con el botón derecho. SIN software adicional, SIN elementos de línea de comando complicados y SIN trucos de shell.
El flujo de trabajo del automatizador:
- Entrada: archivos o carpetas desde cualquier aplicación.
- Paso 1: Crear archivo, el sistema incorporado con parámetros predeterminados.
Paso 2: Ejecute el comando Shell, con la entrada como parámetros. Copie el comando a continuación.
zip -d "$@" "__MACOSX/*" || true
zip -d "$@" "*/.DS_Store" || true
Guárdalo y terminamos! Simplemente haga clic con el botón derecho en la carpeta o en la mayoría de los archivos y elija el flujo de trabajo en el menú de servicios. Se creará un archivo sin metadatos al costado.
no comprimir ningún archivo oculto:
zip newzipname filename.any -x "/.*"
con esta pregunta, debería ser como:
zip newzipname filename.any -x "/__MACOSX"
Sin embargo, se debe decir que el comando zip se ejecuta en el terminal simplemente comprimiendo el archivo, no comprime ningún otro. Entonces haz esto, el resultado es el mismo:
zip newzipname filename.any