15 votos

Comprime por lotes varias carpetas en archivos zip individuales

Tengo docenas de carpetas que necesito comprimir en archivos zip individuales.

Si selecciono todas estas carpetas en el Finder y hago "Comprimir [X] elementos", obtengo un archivo zip que contiene todo de las carpetas, mientras que lo que quiero es un archivo zip por carpeta.

Intenté crear un flujo de trabajo con Automator utilizando la acción "Crear archivo", pero se comporta de la misma manera: al introducir varios archivos/carpetas se obtiene un único archivo zip. No hay manera de especificar que la acción se ejecute en cada elemento individualmente.

Básicamente, estoy buscando una manera de evitar tener que ejecutar tediosamente "Compress" en el Finder en cada carpeta una a la vez. ¿Hay alguna manera de automatizar esto?

1 votos

He actualizado mi respuesta para mejorar el código utilizado para incrementar el nombre del archivo zip de manera que emule la forma en que el comando Compress [n] Items del menú contextual del Finder incrementa un nombre de archivo.

0 votos

Lo siento, he actualizado el código una vez más para eliminar el innecesario popd y ha corregido una errata fatal en for i in $bn*.zip; do que debería haber sido for i in $bn *.zip; do . Observe el espacio entre $bn y *.zip faltaba y no debería haber faltado. Así que, por favor, actualícelo en su aplicación, de lo contrario, pisa File Name 2.zip cuando el basename tiene un espacio.

27voto

hyst329 Puntos 11

Hay una solución alternativa integrada si no quieres usar Automator y te parece bien cambiar la configuración de Archive Utility.

  1. Abra la aplicación Archive Utility.app ubicada en /System/Library/CoreServices/Applications/
  2. Vaya a Archivo > Preferencias
  3. Cambie la preferencia "Usar formato de archivo" a "Archivo Zip"
  4. Arrastra y suelta las carpetas en su icono en el dock.

0 votos

Lo bueno de esta opción es que puedes configurar las preferencias de Archive Utility.app para que mueva el original a la papelera después de que termine, no está limitado a las carpetas. ¿Existe una forma de configurar un servicio de Automator para que se abra con Archive Utility.app como servicio si quieres que el botón derecho sea una opción? Me he encontrado con una limitación, ya que Archive Utility.app no puede seleccionarse mediante la acción Launch Application.

1 votos

@thepen, por supuesto que puedes seleccionar Archive Utility como acción de lanzamiento de la aplicación. Sólo tienes que seleccionar "Otros " y navegar hasta su ubicación que es /System/Library/CoreServices/Applications/ (puede pulsar Cmd-Mayúsculas-G cuando el diálogo de selección de archivos esté abierto para pegar esta ruta para una navegación rápida)

1 votos

¿cuál es la diferencia entre "formato de archivo" y "archivo zip"?

18voto

user3439894 Puntos 5883

Aquí hay un Servicio de automatización 1 que está disponible en Buscador cuando Carpetas se seleccionan y emula a el menús contextuales Comprimir [n] elementos comando excepto crea un archivo zip individual para cada uno de los Carpeta en el nombre de los seleccionados Carpeta . Si el Nombre de la carpeta.zip ya existe, entonces un " 2" ( espacio 2) se adjunta al nombre de archivo Por ejemplo Nombre de la carpeta 2.zip . Esto asegura un archivo zip no se toca y el archivo zip nombre de archivo se incrementará automáticamente cuando sea necesario.

<sup>1 </sup>En <strong>MacOS Mojave </strong>y más tarde, un <strong>Automatizador </strong><em>Servicio </em>se llama <em>Acción rápida </em>. También hay otras diferencias menores de nomenclatura, pero deberían ser más obvias al compararlas con los flujos de trabajo de Automator anteriores a MacOS Mojave.

Para crear el servicio: 1

  1. Abrir Automatizador y seleccione Servicio 1 o Archivo > Nuevo > Servicio Si Automatizador ya está abierto.

  2. Establecer Servicio que recibe seleccionado a carpetas y en a Buscador .

  3. Añade un Ejecutar Shell script Acción , ajuste Shell: a /bin/bash y Pase de entrada: a como argumentos y añadir lo siguiente código :

    for f in "$@"; do
    
        dn="$(dirname "$f")"
        bn="$(basename "$f")"
    
        cd "$dn" || exit
    
        if [[ ! -e "$bn.zip" ]]; then
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn.zip"
        else
            n=2
            for i in $bn *.zip; do
                if [[ "$bn $n.zip" == "$i" ]]; then
                    n="$(( n + 1 ))"
                fi
            done
            ditto -c -k --sequesterRsrc --keepParent "$f" "$bn $n.zip"
        fi
    
    done
    
    afplay /System/Library/Sounds/Purr.aiff
  4. Salvar el Servicio como: Comprimir carpetas por separado

Para utilizar el servicio:

En Buscador o en el Escritorio seleccionar varios Carpetas entonces Haga clic con el botón derecho del ratón en y seleccione Comprimir carpetas por separado desde abajo Servicios .

O después de seleccionar el objetivo Carpetas También puede hacer clic en Buscador > Servicios > Comprimir carpetas por separado de la barra de menús .

Ahí lo tienes, una forma de comprimir varias carpetas por separado y simultáneamente en archivos zip individuales emulando cómo Finder crea un archivo zip. Lo que significa que el archivo zip contiene las bifurcaciones de recursos conservadas y los metadatos HFS en el subdirectorio __MACOSX y sólo incorpora el nombre del directorio principal fuente en destino-archivo y no el nombre completo de la ruta como cuando se utiliza zip (sin -j ) para crear el archivo.

Imagen de Comprimir carpetas por separado

Compress Folders Separately - Automator Service

0 votos

He comprobado tanto tu solución como la de @ababak. Dan exactamente el mismo resultado y la de ababak es mucho más fácil de implementar. De todas formas he votado ambas.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X