Crear un archivo zip usando un Servicio Automator

3

Estoy intentando crear un servicio en Automator en Mac OS X Mountain Lion. El comando que quiero usar es el siguiente:

zip zip-file.zip "$@"

Y aquí hay una captura de pantalla de lo que hice:

Funciona. Pero hay dos problemas:

  1. zip-file.zip se coloca en mi directorio de inicio ~\ . Quiero colocar el archivo zip en el lugar donde se encuentran los archivos originales.

  2. zip-file.zip contiene la estructura de carpetas de los archivos especificados desde la raíz. Solo quiero incluir archivos, o solo del directorio principal más cercano.

¿Qué debo hacer?

    
pregunta Chang 08.09.2012 - 22:40

3 respuestas

3

¿Por qué no solo usar la acción Crear archivo en lugar de shell scripting?

Creé uno rápido que tiene cuatro pasos.

  1. selecciona una carpeta (preguntar por elementos del buscador - solo carpetas)
  2. selecciona los archivos (Obtener contenido de carpeta)
  3. filtra los elementos para no seleccionar ninguna subcarpeta (elementos del buscador de filtros)
  4. pase los archivos a la acción Crear archivo

    
respondido por el Stu Wilson 09.09.2012 - 00:28
1

Pude modificar el script de shell para obtener los resultados deseados, con la ayuda de enlace

declare-anamesdeclare-apartsdeclarei=0names=("$@")
name="$1"
while x=$(dirname "$name"); [ "$x" != "/" ]
do
    parts[$i]="$x"
    i=$(($i + 1))
    name="$x"
done

for prefix in "${parts[@]}" /
do
for name in "${names[@]}"
    do
        if [ "${name#$prefix/}" = "${name}" ]
            then continue 2
        fi
    done
    dir="$prefix"
    break
done

cd "$dir"

for file in "${names[@]}"
do
    zip zip-file.zip -r "${file#$dir/}" -x *.DS_Store
done
    
respondido por el Chang 09.09.2012 - 21:42
0

No uso Automator, pero tengo una solución que utilizo para comprimir archivos. Introduzca el nombre de archivo y la contraseña que desee al principio del script y exporte como una aplicación. Arrastre y suelte sus archivos en el ícono de la gota y voilà, se crea un archivo zip en la misma carpeta que los archivos originales.

on open theItems

    set passwd to "yourPassword"
    set archiveName to "yourArchive"

    tell application "Finder"
            if theItems's length > 1 then
                    set fileName to archiveName & ".zip"
            else
                    set fileName to name of item 1 of theItems & ".zip"
            end if
            --remove existing archive file with same filename
            try
                    set archiveFile to ((container of (item 1 of theItems) as Unicode text) & fileName)
                    if exists file archiveFile then
                            delete file archiveFile
                    end if
            end try
    end tell

    repeat with thisItem in theItems
            set itemPath to quoted form of (POSIX path of thisItem)
            tell application "Finder"
                    set parentFolder to POSIX path of (container of thisItem as alias)
            end tell
            set zipFile to quoted form of (parentFolder & fileName)
            set cmd to "zip -P " & passwd & " -rj " & zipFile & " " & itemPath & " -x *.DS_Store"
            do shell script cmd
    end repeat

end open
    
respondido por el agleung 09.09.2012 - 03:32

Lea otras preguntas en las etiquetas