Creazione di una cartella compressa HFS + automatizzata


17

Vorrei impostare un modo automatizzato per l'archiviazione dei file in OS X Lion. Con l'archiviazione intendo usare la funzione di compressione HFS + su una cartella specifica e rendere automaticamente compressi tutti i file che sposto in questa cartella. Sto pensando di usarlo per archiviare file di grandi dimensioni che non uso spesso, ma senza dover creare manualmente archivi compressi e doverli estrarre nel caso ne avessi bisogno.

Mi sono imbattuto nello strumento afsctool ( brew install afsctool), che può, tramite riga di comando, applicare la compressione HFS + a una cartella ea tutti i file in essa contenuti. Ma credo che non attivi la compressione dei file futuri spostati nella cartella.

Spostare i file manualmente ed eseguire ripetutamente un'istruzione della riga di comando è scomodo. Quindi suppongo che avrei bisogno di usare automator / AppleScript per eseguire questo in due passaggi:

  1. Crea uno script che consenta di spostare qualsiasi file in una cartella specifica. Idealmente un'opzione denominata Archive accessibile tramite il tasto destro del mouse sul file.
  2. Esegui un'istruzione da riga di comando afsctool -c <folder>per attivare la compressione su tutti i nuovi file appena spostati nella cartella.

Non ho esperienza con automator o AppleScript, quindi vorrei sapere da dove iniziare, soprattutto per quanto riguarda come aggiungere azioni al Finder e come eseguire uno strumento da riga di comando da uno script.


aggiornamenti

La guida di @kopischke funziona bene. Lo script stesso, ho realizzato basandomi sulla risposta di @mark, ma usando afsctool -c <folder>invece di ditto. Ecco lo script: dovrebbe essere inserito~/Library/Scripts/Folder Action Scripts

on adding folder items to this_folder after receiving these_items
repeat with i from 1 to number of items in these_items
    try
        set this_item to item i of these_items
        tell application "Finder"
            set the file_name to the POSIX path of this_item
        end tell
        set cmd to "/usr/local/bin/afsctool -c " & file_name
        do shell script cmd
    on error the error_message number the error_number
        display dialog "Error: " & the error_number & ". " & the error_message buttons {"OK"} default button 1

    end try
end repeat
end adding folder items to

Poiché afsctool su MobileMe non è più disponibile, c'è diimdeep / afsctool su GitHub, attualmente 1.6.4.

Anche afsctool in MacPorts dove sono a conoscenza del problema MobileMe ma forse ignari della fonte su GitHub.


Bella domanda Quali tassi di compressione ci si può aspettare da questo?
1000,

Risposte:


6

Ci sono due parti per la risposta alla tua domanda.

  1. Come aggiungere una voce del menu contestuale del Finder ai file “Archivia”: questo è facile da realizzare creando un servizio di Automator (l'automazione di Mac OS X ha una buona panoramica di ciò che i servizi di Automator introdotti in OS X 10.6 possono fare):

    • Avviare Automator, scegliere "Service" quando richiesto per il tipo di flusso di lavoro che si desidera creare.
    • Scegli "File o cartelle" nel menu a discesa "Il servizio riceve" (traduzioni approssimative - Sono su un sistema tedesco). Facoltativamente, impostare "in" a discesa su "Finder".
    • Aggiungi un'azione "Ottieni elementi del Finder selezionati".
    • Aggiungi azioni "Sposta elementi del Finder" sotto di esso e impostalo sulla cartella di destinazione.
    • Salvare il servizio nella posizione predefinita ( ~/Library/Services) come "Archivio".

    ora hai un nuovo menu di servizio e una voce di menu di scelta rapida (a seconda del numero di servizi attivi: nel primo livello di menu o nel sottomenu "Servizi") chiamato "Archivio" che sposta il file o la cartella selezionati sulla destinazione cartella.

  2. Come automatizzare la compressione HFS + dei file aggiunti alla cartella di destinazione: ci sono diversi modi per farlo. Ovviamente potresti semplicemente aggiungere quel passaggio al tuo servizio di archiviazione. Lo svantaggio di questo approccio è che non verrà applicata alcuna compressione se i file o le cartelle vengono aggiunti alla cartella all'esterno del servizio, ovviamente. Un approccio migliore sarebbe quello di comprimere automaticamente tutto nella cartella, senza fare affidamento sul vettore della voce o sull'interazione dell'utente.

    Un modo è, come hai scoperto, far eseguire un'utilità di compressione ogni volta che un file o una cartella vengono aggiunti alla cartella controllata:

    • il modo per avviare un'utilità di shell in AppleScript è il do shell scriptcomando : consultare la documentazione collegata;
    • il modo integrato per sfruttare gli eventi del filesystem in un AppleScript consiste nell'utilizzare le azioni cartella , che richiamano gli script Apple sulle modifiche in una cartella controllata. A quali eventi reagisce lo script sono definiti dallo script stesso, attraverso i gestori che fornisce (ad esempio, lo script nella risposta di Mark ha un gestore per adding folder items- nel senso che reagisce ai file aggiunti di recente; vedere la Guida al linguaggio di Applescript per il riferimento completo ) . La configurazione di Azioni cartella si trova nel menu dei servizi delle cartelle nel Finder (anche nel menu contestuale).
    • un'alternativa turbocompressa alle azioni cartella è Hazel (software commerciale) di Paul Kim , che aggiunge l'elaborazione basata su regole e una pletora di criteri per la gestione degli eventi del file system che vanno ben oltre ciò che è possibile ottenere con semplici azioni cartella - potresti voler esaminare Hazel se pianifica di fare cose più o più complesse sulla falsariga di ciò che stai pianificando ora.

    Un'alternativa all'intero approccio di scripting è l'utilizzo dei Cluster di LateNiteSoft, un altro software commerciale che non fa altro che applicare (e riapplicare, ove necessario) la compressione HFS + al contenuto delle cartelle controllate.


Grazie per la tua risposta. Proverò l'opzione di eseguire un AppleScript come azione cartella. Sono a conoscenza dei Cluster, e quello che sto cercando di ottenere è esattamente questo (Cluster di un povero);)
Boj

@williamvoor: Sono contento che possa aiutarti. Ti dispiacerebbe accettare la risposta, allora? Questo è il pulsante con il segno di spunta :).
kopischke

La soluzione di script dell'azione cartella funziona. La sceneggiatura stessa ho incollato sulla domanda.
Boj,

5

@williamvoor: lo script ha esito negativo con percorsi di file che contengono spazi, poiché set the file_name to the POSIX path of this_itemnon fuoriesce correttamente. Correggere la riga appropriata del codice in questo modo:

set cmd to "/Users/sn/bin/bin/afsctool -c \"" & file_name & "\""

Spiegazione : l'argomento file_name di afcstool è racchiuso tra virgolette, che a loro volta nel codice AppleScript sono sfuggiti per essere correttamente passati all'ambiente della riga di comando.

Meta-argomento : poiché mi mancano i punti reputazione, non ho potuto commentare nella posizione appropriata (= al post di @williamvoor), quindi lo inserisco come una propria risposta e ti chiedo di modificare la modifica del codice nel tuo post, e mi dia un pollice in alto, in modo da guadagnare abbastanza reputazione, permettendomi di commentare direttamente in futuro. Grazie!

Fatto ciò, io e l'amministratore potremmo cancellare il mio post.


3

Questo thread fornisce uno script di mele da utilizzare come azione Cartella che comprime i file man mano che vengono aggiunti

on adding folder items to thisFolder after receiving theseItems
    set destinationPath to "/POSIX path/to/destination/folder"
    repeat with thisItem in theseItems
        set cmd to "ditto --hfsCompression " & quoted form of POSIX path of thisItem & " " & destinationPath
        do shell script cmd with administrator privileges
    end repeat
end adding folder items to

Non sapevo --hfsCompressiondell'opzione in ditto- buona! Ma la tua risposta non affronta la domanda di OP sull'integrazione di uno script in movimento nel Finder, sposta i file rilasciati nella cartella di archivio in un'altra cartella (che penso sarebbe un reindirizzamento in più di quello che OP stava pianificando di fare) e chiederà l'autenticazione ogni volta (fastidioso in un contesto di automazione).
kopischke

0

Cluster

... sfrutta la tecnologia di compressione dei file in Mountain Lion, Lion e Snow Leopard ...

Compressione della cartella MoreSpace

... La compressione HFS + ha il miglior effetto sui formati di file non compressi come documenti di testo e dati, database e cassette postali. Le dimensioni tipiche di una casella postale possono essere ridotte fino al 50%. ...

Preferenza

Di questi due, trovo i cluster più maturi e più facili da usare, probabilmente una soluzione migliore per questa domanda.


Procedi con cautela

In un caso limite, possono verificarsi perdite di dati silenziose con usi di AppleFSCompression di terze parti. Da quello che posso dire questo è un bug nel sistema operativo e può verificarsi solo dove c'è una straordinaria mancanza di spazio libero. Darò il bug ad Apple.


1
Entrambi sembrano essere stati interrotti ora.
EpicVoyage,
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.