Come posso creare uno Script di azione cartella per gli elementi di tar lasciati nella cartella?

5

Mi piacerebbe rilasciare / copiare file / cartelle e averli compressi e poi copiati sul mio desktop. Questo è quello che so fino ad ora ... e non è così tanto che ogni aiuto sarebbe apprezzato.

on adding folder items to theFolder after receiving theAddedItems
repeat with x in theAddedItems

Questo creerà il mio elenco di file rilasciati nella cartella. Ora il mio comando di compressione ...

tar cvf - *variableForFileListHere* | gzip -9 - > files.tar.gz

In qualche modo so che devo alimentare l'elenco "theAddedItems" creato nella prima parte dello script al comando tar. Ma non ho idea di come questo possa essere fatto. Leggendo ora su tar e le sue opzioni sono sicuro che c'è una funzione "include" per puntare a un elenco di elementi da aggiungere all'archivio.

    
posta BsdHelper 22.08.2013 - 17:06
fonte

3 risposte

4

Prova:

on adding folder items to theFolder after receiving theAddedItems
    set myList to {}
    repeat with x in theAddedItems
        set end of myList to quoted form of x's POSIX path & space
    end repeat
    set myList to text 1 thru -2 of (myList as text)
    do shell script "tar cvf " & myList & " | gzip -9 - > ~/Desktop/files.tar.gz"
end adding folder items to
    
risposta data 22.08.2013 - 18:19
fonte
7

Piuttosto che passare il tempo con Folder Actions (che io e molti altri abbiamo trovato inaffidabili), potrei suggerire di provare Hazel?

link

Disclaimer: inizierò dicendo che non è gratuito (è $ 28), ma se ti piace l'automazione, questo è il punto di partenza. C'è una prova gratuita di 14 giorni. Sono completamente estraneo all'azienda tranne che come utente estremamente felice.

Hazel ti permette di creare "azioni cartella" molto facilmente usando una bella interfaccia grafica simile alla creazione delle regole Mail.app. Puoi agire in base a nome file, estensione, tipo (ad esempio "immagini, documenti, filmati") e molti altri.

Ecco la regola che uso per qualsiasi file / cartella aggiunta a ~ / Action / ZipIt /

Hazelcercaqualsiasifilechenonsiagiàunarchivio(avreipotutodirlodiagiresuqualsiasifile,mavoglioevitaredicomprimerefilechesonogiàcompressi).Potreiaggiungerealtricriteri(chepotrebberoessereopzioniorequisiti,comebooleani"AND" o "OR").

Qualunque cosa sia, verrà archiviata, quindi spostata sul desktop, quindi verrà mostrata nel Finder.

Vedi il piccolo pulsante "Opzioni" accanto a "Sposta sul desktop"? Fai clic su questo e puoi dire a Hazel cosa fare se rileva che il file che stai per spostare è duplicato.

C'è anche un'opzione per far sì che Finder sia portato in primo piano o meno.

Ci sono molte altre azioni che Hazel può fare oltre all'archivio:

(Nota: iPhoto e Aperture sono disattivati perché non li ho installati.)

Le opzioni per eseguire script AppleScript / Automator / shell significano che hai il potere di fare praticamente tutto quello che puoi immaginare.

Potrei andare avanti, ma ecco un altro esempio: ho Hazel guardare ~ / Download / per i file .zip. Quando li trova, li decomprime in ~ / Action / Unzipped / (puoi farlo sia dicendo all'utilità di archiviazione di usare quella cartella, o usare The Unarchiver). Hazel quindi cerca in ~ / Action / Unzipped / per i nuovi file che terminano con .app e, se trovati, li sposta in / Applications / e li apre. Ecco! Installazione istantanea di app.

Nel mondo delle app 99 ¢, $ 28 sembra probabilmente una spesa enorme, ma per me Hazel è uno di quegli strumenti che prende qualcosa che Apple ha fatto, ma non molto bene (Folder Actions), e lo sostituisce con qualcosa che ti chiedo perché Apple non l'abbia fatto. Hai una prova di 2 settimane e uno sviluppatore dedicato che ha lavorato a questa app per anni e che è molto bravo a rispondere alle domande di supporto.

Mi dispiace suonare come un fan, ma quando si tratta di Hazel e alcune altre app Mac, lo sono davvero.

    
risposta data 22.08.2013 - 18:06
fonte
0

C'è un'altra opzione.

Invece di un'azione cartella (e i problemi inerenti a loro), potresti utilizzare QueueDirectories in launchd per chiamare uno script di shell.

Ad esempio, chiamerà lo script /usr/local/bin/mktgz.sh ogni volta che un file viene inserito in /Users/foo/Action/Gzip

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.tjluoma.mktgz</string>
    <key>Program</key>
    <string>/usr/local/bin/mktgz.sh</string>
    <key>QueueDirectories</key>
    <array>
        <string>/Users/foo/Action/Gzip</string>
    </array>
</dict>
</plist>

Ho una versione più sviluppata di questo disponibile al link .

    
risposta data 24.08.2013 - 22:47
fonte

Leggi altre domande sui tag