Creazione di una cartella compressa HFS + automatica

15

Vorrei impostare un modo automatico per l'archiviazione dei file in OS X Lion. Con l'archiviazione intendo l'uso della funzione di compressione HFS + su una cartella specifica e ogni file che trasferisco in questa cartella viene automaticamente compresso. 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 in cui ne avessi bisogno.

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

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

  1. Crea uno script che consente di spostare qualsiasi file in una cartella specifica. Idealmente un'opzione denominata Archivio accessibile tramite clic con il pulsante destro del mouse sul file.
  2. Esegui un'istruzione della riga di comando afsctool -c <folder> , per attivare la compressione su tutti i nuovi file appena trasferiti nella cartella.

Non ho esperienza con l'uso di automator o AppleScript, quindi mi piacerebbe sapere da dove cominciare, specialmente riguardo a 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, l'ho creato in base alla risposta di @mark, ma utilizzando afsctool -c <folder> , invece di ditto . Ecco la sceneggiatura: Dovrebbe essere messo in ~/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, ci sono diimdeep / afsctool su GitHub, attualmente 1.6.4.

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

    
posta Boj 05.05.2012 - 13:20
fonte

4 risposte

5

Ci sono due parti per la risposta alla tua domanda.

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

    • Avvia Automator, scegli "Servizio" quando richiesto per il tipo di flusso di lavoro che desideri creare.
    • Scegli "File o cartelle" nel menu a discesa "Servizio ricevuto" (traduzioni approssimative - Sono su un sistema tedesco). Facoltativamente, imposta "in" drop down su "Finder".
    • Aggiungi un'azione "Ottieni elementi del Finder selezionati".
    • Aggiungi un'azione "Muovi oggetti del Finder" sotto quella e impostala sulla cartella di destinazione.
    • Salva il tuo servizio nella posizione predefinita ( ~/Library/Services ) come "Archivio".

    ora hai un nuovo menu di servizio e voce di menu contestuale (in base al numero di servizi attivi: al primo livello di menu o nel sottomenu "Servizi") chiamato "Archivio" che sposterà il file o la cartella selezionati nella cartella di destinazione.

  2. Come automatizzare la compressione HFS + dei file aggiunti alla cartella di destinazione: ci sono diversi modi per riuscirci. Potresti, naturalmente, semplicemente aggiungere quel passaggio al tuo servizio di archiviazione. Lo svantaggio di questo approccio è che nessuna compressione verrà applicata se file o cartelle vengono mai aggiunti alla cartella all'esterno del servizio, naturalmente. Un approccio migliore sarebbe quello di fare in modo che tutto nella cartella venga compresso automaticamente, senza fare affidamento sul vettore di entrata o sull'interazione dell'utente.

    Un modo è, come hai scoperto, avere un'utilità di compressione eseguita ogni volta che un file o una cartella viene aggiunto alla tua cartella controllata:

    • il modo per avviare un'utilità di shell in AppleScript è comando do shell script - consultare la documentazione collegata;
    • il modo integrato per sfruttare gli eventi del file system in un AppleScript consiste nell'utilizzare Azioni cartella , che chiamano AppleScripts sulle modifiche in una cartella controllata. Gli eventi a cui lo script reagisce sono definiti dallo script stesso, attraverso i gestori che fornisce (ad esempio, lo script in la risposta di Mark ha un gestore per adding folder items - il che significa che reagisce ai file aggiunti di recente, vedere la Guida linguistica di Applescript per il riferimento completo ). La configurazione di Cartella Azioni si trova nel menu servizi delle cartelle nel Finder (anche nel menu contestuale).
    • un'alternativa turbo a Folder Actions è Hazel di Paul Kim (software commerciale), che aggiunge un'elaborazione basata su regole e una pletora di criteri per la gestione degli eventi del filesystem che vanno ben al di là di ciò che è possibile ottenere con semplici azioni di cartella. Potresti voler indagare su Hazel se pensi di fare cose più o più complesse sulla falsariga di ciò che stai pianificando ora.

    Un'alternativa all'intero approccio di scripting sta usando i Clusters di LateNiteSoft - un altro software commerciale, che non fa altro che automaticamente applica (e riapplica, dove necessario) compressione HFS + al contenuto delle cartelle guardate.

risposta data 07.05.2012 - 11:32
fonte
5

@williamvoor: lo script fallisce con percorsi di file che contengono spazi, poiché set the file_name to the POSIX path of this_item non scade correttamente. Correggi la riga appropriata del tuo codice a questo:

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

Spiegazione : l'argomento file_name di afcstool è circondato da virgolette, che a loro volta nel codice AppleScript sono sfuggite per essere consegnate correttamente all'ambiente della riga di comando.

Meta-topic : dato che mi mancano punti reputazione, non ho potuto commentare nella posizione appropriata (= per il post di @williamvoor), quindi lo postò come risposta e chiedo a modificare il codice nel tuo post e darmi un pollice in alto, in modo da ottenere una reputazione sufficiente, permettendomi di commentare direttamente in futuro. Grazie!

Dopo averlo fatto io oe admin potrebbe cancellare il mio post.

    
risposta data 23.12.2012 - 20:22
fonte
3

Questo thread fornisce un applescript da utilizzare come azione Folder 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
    
risposta data 05.05.2012 - 17:42
fonte
0

Cluster

…  takes advantage of the file compression technology in Mountain Lion, Lion and Snow Leopard …

Compressione cartella MoreSpace

… HFS+ compression has the best effect on uncompressed file formats like text and data documents, databases and mailboxes. A typical Mail mailbox size can be reduced up to 50%. …

Preferenze

Di questi due, trovo che i cluster sono più maturi e più facili da usare, probabilmente più adatti a questa domanda.

Procedi con cautela

In un caso limite, può verificarsi un dataloss silenzioso con l'utilizzo di AppleFSCompression da parte di terzi. 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.

    
risposta data 30.03.2013 - 15:37
fonte

Leggi altre domande sui tag