Creare un file zip utilizzando un servizio di automazione

3

Sto cercando di creare un servizio in Automator in Mac OS X Mountain Lion. Il comando che voglio usare è il seguente:

zip zip-file.zip "$@"

Ed ecco una schermata di ciò che ho fatto:

Funziona. Ma due problemi:

  1. zip-file.zip è inserito nella mia directory home ~\ . Voglio posizionare il file zip dove sono i file originali.

  2. zip-file.zip contiene la struttura delle cartelle dei file specificati a partire dalla radice. Voglio includere solo i file o solo dalla directory padre più vicina.

Che cosa dovrei fare?

    
posta Chang 08.09.2012 - 22:40
fonte

3 risposte

3

Perché non utilizzare l'azione Crea archivio anziché lo script di shell?

Ne ho creato uno veloce con quattro passaggi.

  1. seleziona una cartella (Chiedi elementi del Finder - Solo cartelle)
  2. seleziona i file (Ottieni contenuto cartella)
  3. filtra gli elementi per non selezionare alcuna sottocartella (elementi del filtro di ricerca)
  4. passa i file all'azione Crea archivio

    
risposta data 09.09.2012 - 00:28
fonte
1

Sono stato in grado di modificare lo script della shell per ottenere i risultati desiderati, con l'aiuto di link

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
    
risposta data 09.09.2012 - 21:42
fonte
0

Non uso Automator, ma ho una soluzione che uso per comprimere i file. Inserisci il nome file e la password desiderati all'inizio dello script ed esporta come un'applicazione. Trascina i tuoi file sull'icona di droplet e voilà viene creato un archivio zip nella stessa cartella dei file originali.

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
    
risposta data 09.09.2012 - 03:32
fonte

Leggi altre domande sui tag