2015-04-08 16 views
14

Da quello che vedo, le unità mappate in rete appaiono come sottocartelle della cartella/Volumi.Come monitorare le modifiche ai file su unità mappate in rete?

Qual è il modo corretto per ottenere gli aggiornamenti delle modifiche ai file (cancella/crea/aggiorna) da questa cartella?

Would/dev/fsevents funziona per quello?

In che modo Finder è a conoscenza dei cambiamenti?

+0

A meno che il protocollo di condivisione file non includa un modo per il server di notificare al cliente le modifiche (e non conosco alcun protocollo che lo faccia), non sarà possibile. –

+0

Questo ha senso, ma ancora: come fa Finder a farlo? – Jamie

+0

@Gordon - NTFS e SMB consentono le notifiche client delle modifiche (anche le unità di rete mappate se sono un sistema Windows che esegue NTFS). Ma le macchine Linux che ho utilizzato per l'esecuzione di SAMBA non attivano l'evento. Quindi il suo tipo di Microsoft solo come fornisce la funzionalità anche se qualsiasi provider dovrebbe essere in grado di offrire. – jww

risposta

2

Hai ragione, OS X monta le unità di rete in/Volumes

Il modo per ottenere gli aggiornamenti di modifica del file è quello di utilizzare File System Events API. È un'AP basata su C in cui è possibile controllare tutte le modifiche in directory specifiche (o anche /).

Si potrebbe creare il flusso con FSEventStreamCreate e partendo con FSEventStreamScheduleWithRunLoop

Siate pronti a scavare nel file di intestazione in quanto v'è una maggiore documentazione su di essa come nella documentazione di riferimento

Da quello che posso dire Probabilmente il Finder utilizza alcune API interne o lo kernel queues che sono più complesse rispetto all'API di livello superiore di FSEvents.h

C'è una bella interfaccia grafica per aiutarti a vedere come arrivano gli eventi. Si chiama fseventer by fernlightning (non ancora Yose acaro pronto)

2

È possibile utilizzare fswatch, che trovo più semplice da installare tramite homebrew. E, sì, usa FSEvents. Poi basta fare:

fswatch /Volumes/MUSIC 

dove MUSIC è un server musicale Samba basata sulla mia rete.

Ecco come appare in azione ... prima mostro i volumi montati (e che MUSIC è basato su Samba) nella finestra in alto, quindi avvio fswatch nella finestra in basso a sinistra, quindi apporto le modifiche nel filesystem nella finestra in alto e puoi vederli accadere nel Finder e anche vedere nella finestra in basso a sinistra che fswatch tiene traccia di tutti gli eventi.

enter image description here

È anche possibile utilizzare per interagire con un altro programma ogniqualvolta vengono rilevati eventi simili (estratto dal fswatch manpage):

Probabilmente il modo più semplice per tubo fswatch ad un altro programma in ordine per rispondere a un evento è utilizzando xargs:

$ fswatch -0 [opts] [paths] | xargs -0 -n 1 -I {} [command] 
  • fswatch -0 dividerà i record usando il carattere NUL.

  • xargs -0 divide i record utilizzando il carattere NUL. Questo è necessario per abbinare correttamente l'impedenza con fswatch.

  • xargs -n 1 invocherà il comando ogni record. Se vuoi farlo ogni x record, allora usa xargs -n x.

  • xargs -I {} sostituirà le occorrenze di {} in comando con l'argomento analizzato. Se il comando in esecuzione non ha bisogno del nome del percorso dell'evento, è sufficiente eliminare questa opzione. Se preferisci usare un'altra stringa sostitutiva, sostituisci {} con la tua.

+0

Grazie per il dettagliato esempio di utilizzo di fswatch! Lo stavo chiedendo dal punto di vista di uno sviluppatore, ma dal punto di vista dell'utente la tua risposta è ottima. – Jamie

+0

@Mark può 'fswatch' funzionare quando si cambiano i file su un computer remoto che ha un volume mappato su macos? Ho una mappa della rete Windows e 'fswatch' funziona quando cambio un file in quella directory dall'interno della comp mac, ma non mostra nulla quando cambio un file usando la macchina Windows sul percorso fisico. –

+0

@ChristosLytras Spiacente, non lo so - generalmente cerco ed evito Windows. –

Problemi correlati