Monitorare una cartella OSX per le modifiche ai file quindi eseguire uno script bash [duplicato]


9

Possibile duplicato:
Guarda Filesystem in tempo reale su OS X e Ubuntu

Sto cercando un metodo efficiente per monitorare una directory locale in OSX e se qualche file è stato modificato in quella directory, esegui uno script bash per trasferire i file su github.

Qualche suggerimento di strumenti per il monitoraggio di una directory per le modifiche ai file, quindi l'attivazione di un'azione, vale a dire uno script bash?


1
Questa domanda così com'è è al limite una raccomandazione software, che non è generalmente consentita Super User . Prova a riformularlo per fare la tua domanda di root, "Come posso effettuare automaticamente il commit delle modifiche e spingere da un repository git ogni volta che i file vengono aggiunti / cancellati / modificati?"
Darth Android

@DarthAndroid, accd alle domande frequenti, questa domanda va bene così com'è. Il PO non chiede consigli per lo shopping o l'acquisto.
ephsmith

1
@IP L'OP chiede consigli per qualcosa, che è piuttosto fuori tema. Il problema principale però è che non stanno spiegando il loro problema e chiedono solo la loro soluzione tentata.
slhck

Il problema è semplice. Monitora una directory per le modifiche e applica le modifiche a un repository. È tutto nella domanda dell'OP. Il link che hai fornito ha la risposta. Buona chiamata
ephsmith

Risposte:


17

utilizzando fswatch dal tuo repository:

fswatch . 'git commit -avm "snapshot at ${date}"'

Questo semplice esempio cattura solo le modifiche ai file già presenti nel repository.


Questo può essere fatto con azioni di cartella che sono incorporate in OS X. Vedi la risposta tramite il link che slhk ha fornito sopra.
ephsmith

1
Potresti espandere la tua risposta aggiungendo un esempio che spiega che cosa l'OP vuole ottenere. Non è consigliabile pubblicare un link.
slhck

Questo sembra incoraggiante. Pensavo di poter eseguire ./fswatch / some / dir ./some/dir/bash_script.sh
Tegan Snyder

+1 - Ci ho provato fswatch dopo aver letto la tua risposta. Ottima utilità - molto simile a inotify per Linux e fa uso di OS X nativo fsevent
cwd

2

Un'opzione sarebbe semplicemente usare launchd. Salva un elenco di proprietà come questo come ~/Library/LaunchAgents/com.superuser.445907.pliste caricarlo con launchctl load ~/Library/LaunchAgents/com.superuser.445907.plist oppure disconnettendosi e rientrando.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd>
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.superuser.445907</string>
    <key>Program</key>
    <string>/Users/username/script</string> <!-- ~/ doesn't work -->
    <key>WatchPaths</key>
    <array>
        <string>/Users/username/Folder/</string>
    </array>
    <key>ThrotteInterval</key>
    <integer>0</integer> <!-- run at most every 0 seconds, by default 10 -->
</dict>
</plist>

Launchd registra solo le modifiche ai file quando vengono salvati atomicamente, o eliminati e ricreati ogni volta che vengono salvati. La maggior parte delle applicazioni OS X esegue i salvataggi atomici per impostazione predefinita, ma ad esempio TextMate e vim no. Le modifiche nelle sottocartelle delle cartelle guardate non vengono rilevate.

launchctl unload $path && launchctl load $path applica le modifiche a un plist.

Vedere man launchd e man launchd.plist per maggiori informazioni.


Approccio interessante Daro 'un'occhiata e torno da te. Grazie per il feedback.
Tegan Snyder

Questo metodo ha sicuramente i suoi limiti. Non è possibile rilevare le modifiche nelle sottocartelle delle cartelle guardate. Questa tecnica inoltre non ti dice quale file ha avuto un evento (nuovo file, modifica, cancellazione, ecc.) - solo che il percorso ha avuto un evento.
Volomike
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.