3 votos

Crear un archivo zip utilizando un Servicio de Automator

Estoy tratando de crear un servicio de Automator en Mac OS X Mountain Lion. El comando que desea utilizar es la siguiente:

zip zip-file.zip "$@"

Y aquí está una captura de pantalla de lo que hice:

enter image description here

Funciona. Pero dos problemas:

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

  2. zip-file.zip contiene la estructura de carpetas de los archivos especificados a partir de la root. Quiero incluir sólo los archivos, o solo desde la más cercana al directorio padre.

¿Qué debo hacer?

4voto

Nader Shirazie Puntos 8494

Por qué no usar simplemente el Crear Archivo de acción en lugar de shell scripting?

He creado un rápido uno que tiene cuatro pasos.

  1. selecciona una carpeta (Pedir Buscador de Artículos de Carpetas)
  2. selecciona los archivos (Obtener el Contenido de la Carpeta)
  3. los filtros de los elementos no selecciona todas las subcarpetas (Filtro de Buscador de Artículos)
  4. pasar los archivos al Crear Archivo de acción

enter image description here

1voto

lycono Puntos 801

Yo no uso Automator, pero tengo una solución que yo uso para los archivos zip. Poner en su deseada nombre de archivo y la contraseña en el inicio de la secuencia de comandos y la exportación como una aplicación. Arrastrar y soltar los archivos en el icono de droplet y voilà un archivo zip que se crea 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

1voto

Yo era capaz de modificar la secuencia de comandos de shell para obtener los resultados deseados, con la ayuda de http://stackoverflow.com/questions/12340846/bash-shell-script-to-find-the-closest-parent-directory-of-several-files/12341334#12341334

enter image description here

declare -a names
declare -a parts
declare i=0

names=("$@")
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

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: