2015-04-08 34 views
14

Z tego, co widzę, dyski mapowane w sieci pojawiają się jako podfoldery folderu/Volumes.Jak monitorować zmiany plików na dyskach mapowanych w sieci?

Jaki jest właściwy sposób pobierania aktualizacji plików (usuwanie/tworzenie/aktualizacja) z tego folderu?

Czy/dev/fsevents do tego służą?

W jaki sposób Finder wie o zmianach?

+0

O ile protokół udostępniania plików nie pozwala serwerowi powiadamiać klienta o zmianach (i nie znam żadnych protokołów, które to robią), nie będzie to możliwe. –

+0

To ma sens, ale wciąż: w jaki sposób Finder to robi? – Jamie

+0

@Gordon - NTFS i SMB umożliwiają powiadamianie klientów o zmianach (nawet mapowane dyski sieciowe, jeśli jest to system Windows z systemem plików NTFS). Ale komputery z systemem Linux, które współdziałam z uruchomieniem SAMBA, nie uruchamiają zdarzenia. Tak więc jego rodzaj jak tylko Microsoft zapewnia tę funkcję, mimo że każdy dostawca powinien być w stanie ją zaoferować. – jww

Odpowiedz

2

Jesteś poprawne, OS X montuje dyski sieciowe w/Volumes

The sposób, aby uzyskać aktualizacje modyfikacji pliku jest użycie File System Events API. Jest to API oparte na C, w którym można oglądać wszystkie zmiany w określonych katalogach (lub nawet /).

by utworzyć strumień z FSEventStreamCreate i uruchomienie go z FSEventStreamScheduleWithRunLoop

Bądź przygotowany, aby zagłębić się w nagłówku pliku-jak tam jest bardziej dokumentacja na to, jak w dokumentacji referencyjnego

Z tego co mogę powiedzieć , Finder prawdopodobnie używa jakiegoś wewnętrznego API lub kernel queues, które są bardziej skomplikowane w konfiguracji niż API wyższego poziomu FSEvents.h

Jest ładny GUI, który pomaga ci zobaczyć, jak wchodzą wszystkie wydarzenia. Nazywa się fseventer by fernlightning (jeszcze nie Yose mite ready)

2

Możesz użyć fswatch, który uważam za łatwy do zainstalowania przez homebrew. I tak, używa FSEvents. Wtedy po prostu zrobić:

fswatch /Volumes/MUSIC 

gdzie MUSIC jest serwer Samba-muzyczny oparty na mojej sieci.

Oto, jak wygląda w akcji ... Najpierw pokazuję zamontowane woluminy (i że MUZYKA jest oparta na Sambie) w górnym oknie, a następnie uruchamiam fswatch w lewym dolnym oknie, a następnie dokonuję modyfikacji w systemie plików w górnym oknie możesz zobaczyć je w Finderze, a także w lewym dolnym oknie, które fswatch śledzi wszystkie zdarzenia.

enter image description here

Można również użyć go do interakcji z innym programem, gdy wykrywane są zdarzenia, jak to (wyciąg z fswatch podręcznika):

Prawdopodobnie najprostszy sposób na rurze fswatch do innego programu w celu do reagowania na zdarzenia jest używając xargs:

$ fswatch -0 [opts] [paths] | xargs -0 -n 1 -I {} [command] 
  • fswatch -0 podzieli rekordy za pomocą znaku NUL.

  • xargs -0 podzieli rekordy za pomocą znaku NUL. Jest to wymagane, aby poprawnie dopasować impedancję z zegarem fswatch.

  • xargs -n 1 wywoła polecenie każdego rekordu. Jeśli chcesz zrobić to co X rekordy, następnie użyć xargs -n x.

  • xargs -I {} zastąpi wystąpienie {} w poleceniu z analizowanym argumentem. Jeśli uruchomione polecenie nie potrzebuje nazwy ścieżki zdarzenia, po prostu usuń tę opcję. Jeśli wolisz używać innego ciągu zastępującego, zastąp {} swoim.

+0

Dziękujemy za szczegółowy przykład użycia fswatch! Pytałem o to z punktu widzenia programisty, ale z perspektywy użytkownika twoja odpowiedź jest świetna. – Jamie

+0

@Mark Czy 'fswatch' może działać podczas zmiany plików na komputerze zdalnym, który ma zmapowany wolumin do makr? Mam mapę sieci Windows i 'fswatch' działa, gdy zmieniam plik do tego katalogu z wewnątrz mac comp, ale nic nie wyświetla po zmianie pliku przy użyciu maszyny Windows na ścieżce fizycznej. –

+0

@ChristosLytras Przepraszam, nie wiem - na ogół staram się unikać systemu Windows. –