Comprimi in batch più cartelle in singoli file zip


12

Ho dozzine di cartelle che devo comprimere in singoli file zip.

Se seleziono tutte queste cartelle nel Finder e faccio "Comprimi [X] elementi", ottengo un file zip contenente tutte le cartelle, mentre quello che voglio è un file zip per cartella.

Ho provato a creare un flusso di lavoro con Automator utilizzando l'azione "Crea archivio", ma si comporta allo stesso modo: l'immissione di più file / cartelle genera un singolo file zip. Non è possibile specificare che l'azione venga eseguita su ciascun elemento singolarmente.

Fondamentalmente, sto cercando un modo per evitare di dover eseguire noiosamente "Compress" nel Finder su ogni singola cartella una alla volta. C'è un modo per automatizzare questo?


1
Ho aggiornato la mia risposta per migliorare il codice utilizzato per incrementare il nome file dell'archivio zip in modo da emulare il modo in cui il comando Comprimi [n] elementi del menu contestuale del Finder aumenta un nome file.
user3439894,

Spiacenti, ho aggiornato nuovamente il codice per rimuovere l'inutile popderrore e corretto un errore irreversibile for i in $bn*.zip; do, che avrebbe dovuto essere for i in $bn *.zip; do. Nota lo spazio tra $bne *.zip, mancava e non avrebbe dovuto essere. Quindi, per favore aggiornalo nella tua implementazione, altrimenti passa File Name 2.zipquando basenameha uno spazio al suo interno.
user3439894,

Risposte:


14

Ecco un servizio Automator 1 che diventa disponibile nel Finder quando le cartelle sono selezionate ed emula il comando Comprimi [n] elementi del menu di scelta rapida, tranne per il fatto che crea un singolo file di archivio zip per ogni cartella selezionata nel nome della cartella selezionata . Se il file Nome cartella.zip esiste già, allora ( spazio 2) viene aggiunto al nome file , ad esempio Nome cartella 2.zip . Ciò garantisce un file di archivio zip esistente " 2"non viene toccato e il nome file dell'archivio zip verrà automaticamente incrementato se necessario.

1 In macOS Mojave e successivamente, un servizio di automazione viene chiamato Azione rapida . Esistono anche altre differenze di nomenclatura minori, ma dovrebbero essere più evidenti se confrontate con i flussi di lavoro pre-macOS Mojave Automator.

Per creare il servizio: 1

  1. Apri Automator e seleziona Servizio 1 o File > Nuovo > Servizio se Automator è già aperto.

  2. Set servizio riceve selezionata per le cartelle e in al Finder .

  3. Aggiungi uno script Run Shell azione , impostando Shell: a / bin / bash e ingresso Passo: per come argomenti e aggiungere il seguente codice :

    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. Salva il servizio come: Comprimi cartelle separatamente

Per utilizzare il servizio:

Nel Finder o sul desktop selezionare più cartelle , quindi fare clic con il pulsante destro del mouse e selezionare Comprimi cartelle separatamente da Servizi .

Oppure dopo aver selezionato le Cartelle di destinazione , puoi anche fare clic su Trova > Servizi > Comprimi cartelle separatamente dalla barra dei menu .

Ecco qua, un modo per comprimere più cartelle separatamente e contemporaneamente contemporaneamente in singoli archivi zip emulando al contempo come Finder crea un file di archivio zip. Significa che l'archivio zip contiene forchette di risorse conservate e metadati HFS nella sottodirectory __MACOSX e incorpora solo l' origine del nome della directory principale nell'archivio di destinazione , non il percorso completo come quando si utilizza zip(senza -j) per creare l'archivio.

Immagine delle cartelle compresse separatamente

Comprimere le cartelle separatamente - Automator Service


Ho controllato sia la tua soluzione sia quella di @ ababak. Danno esattamente lo stesso risultato e ababak's è molto più facile da implementare. Ho comunque votato entrambi.
turzifer,

15

C'è una soluzione alternativa integrata se non vuoi usare Automator e stai bene cambiando le impostazioni di Archive Utility.

  1. Apri Archive Utility.app che si trova in / Sistema / Libreria / CoreServices / Applicazioni /
  2. Vai a File> Preferenze
  3. Modifica la preferenza "Usa formato archivio" su "Archivio zip"
  4. Trascina e rilascia le cartelle nella relativa icona nel dock.

il bello di questa opzione è che puoi impostare le preferenze di Archive Utility.app per spostare l'originale nel cestino al termine, non si limita alle cartelle. C'è un modo per impostare un servizio Automator da aprire con Archive Utility.app come servizio se si desidera fare clic con il tasto destro del mouse come opzione? Ho riscontrato un limite poiché Archive Utility.app non può essere selezionato mediante l'azione Avvia applicazione.
thepen

@thepen, ovviamente puoi selezionare l'utilità di archiviazione come azione di avvio dell'applicazione. Devi solo selezionare "Altro ..." e navigare fino alla sua posizione che è /System/Library/CoreServices/Applications/(puoi premere Cmd-Shift-G quando la finestra di selezione file è aperta per incollare questo percorso per una navigazione rapida)
ababak

qual è la differenza tra "formato archivio" e "archivio zip"?
user1993

Questo metodo è un flusso di lavoro molto più semplice. Ho provato il comando: per l'articolo in *; comprimi "$ {item} .zip" "$ {item}"; fatto nel terminale ma non ha funzionato bene. Sconosciuto il perché, ma non volevo prendermi il tempo per capirlo. Questo ha funzionato bene.
ArchonOSX
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.