Czy na Macu jest polecenie "watch" lub "inotifywait"?
Chcę obejrzeć folder na moim Macu (Snow Leopard), a następnie wykonać skrypt (podając mu nazwę pliku tego, co zostało przeniesione do folderu (jako parametr... x.sh "filename")).
Mam skrypt napisany w bash (x.sh) to przeniesie niektóre pliki i inne rzeczy na wejściu $1 potrzebuję tylko OSX, aby dać mi nazwę pliku, gdy nowe pliki / foldery są przenoszone / tworzone do katalogu.
Jakieś takie polecenie?
12 answers
Fswatch
Fswatch jest małym programem używającym API Mac OS X FSEvents do monitorowania katalogu.
Gdy odbierane jest zdarzenie o jakiejkolwiek zmianie w tym katalogu, określone
polecenie powłoki jest wykonywane przez /bin/bash
Jeśli jesteś na GNU / Linuksie,
inotifywatch (część
inotify-tools
pakiet na większości dystrybucji) zapewnia podobne
funkcjonalność.
Aktualizacja: fswatch
może być teraz używany na wielu platformach, w tym NA BSD, Debianie i Okna.
Składnia / Prosty Przykład
Nowy sposób, który może oglądać wiele ścieżek-dla wersji 1.x i wyżej :
fswatch -o ~/path/to/watch | xargs -n1 ~/script/to/run/when/files/change.sh
Starszy sposób dla wersji 0.x :
fswatch ~/path/to/watch ~/script/to/run/when/files/change.sh
Instalacja z Homebrew
Od 9/12/13 został dodany z powrotem do homebrew - yay! Tak więc zaktualizuj swoją listę formuł (brew update
) i wszystko, co musisz zrobić, to:
brew install fswatch
Instalacja Bez Homebrew
Wpisz te polecenia w Terminal.app
cd /tmp
git clone https://github.com/alandipert/fswatch
cd fswatch/
make
cp fswatch /usr/local/bin/fswatch
Jeśli nie masz kompilatora c
w systemie może być konieczne zainstalowanie narzędzi Xcode lub Xcode-oba darmowe. Jednakże, jeśli tak jest, prawdopodobnie powinieneś po prostu sprawdzić homebrew.
Dodatkowe opcje dla fswatch
wersji 1.x
Usage:
fswatch [OPTION] ... path ...
Options:
-0, --print0 Use the ASCII NUL character (0) as line separator.
-1, --one-event Exit fsw after the first set of events is received.
-e, --exclude=REGEX Exclude paths matching REGEX.
-E, --extended Use exended regular expressions.
-f, --format-time Print the event time using the specified format.
-h, --help Show this message.
-i, --insensitive Use case insensitive regular expressions.
-k, --kqueue Use the kqueue monitor.
-l, --latency=DOUBLE Set the latency.
-L, --follow-links Follow symbolic links.
-n, --numeric Print a numeric event mask.
-o, --one-per-batch Print a single message with the number of change events.
in the current batch.
-p, --poll Use the poll monitor.
-r, --recursive Recurse subdirectories.
-t, --timestamp Print the event timestamp.
-u, --utc-time Print the event time as UTC time.
-v, --verbose Print verbose output.
-x, --event-flags Print the event flags.
See the man page for more information.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-27 08:12:55
Możesz użyć launchd do tego celu. Launchd można skonfigurować tak, aby automatycznie uruchamiał program po zmianie ścieżki pliku.
Na przykład następujący plik konfiguracyjny launchd uruchomi program /usr/bin/logger
, gdy folder pulpitu mojego konta użytkownika zostanie zmodyfikowany:
<?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>logger</string>
<key>ProgramArguments</key>
<array>
<string>/usr/bin/logger</string>
<string>path modified</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Users/sakra/Desktop/</string>
</array>
</dict>
</plist>
Aby aktywować plik konfiguracyjny, zapisz go w folderze LaunchAgents w folderze biblioteki jako " logger.plist".
Z powłoki można następnie użyć polecenia launchctl
, Aby aktywować logger.plist po uruchomieniu:
$ launchctl load ~/Library/LaunchAgents/logger.plist
Folder pulpitu jest teraz monitorowany. Za każdym razem, gdy jest zmieniany, powinieneś zobaczyć wyjście w systemie.log (Użyj konsoli.app). Aby wyłączyć rejestrator.plist, run:
$ launchctl unload ~/Library/LaunchAgents/logger.plist
Powyższy plik konfiguracyjny używa opcji WatchPaths
. Alternatywnie można również użyć
QueueDirectories
opcja. Więcej informacji można znaleźć na stronie man launchd.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-02 12:39:17
Facebook watchman , dostępny za pośrednictwem Homebrew, również wygląda ładnie. Obsługuje również filtrowanie:
Te dwie linie tworzą obserwację w katalogu źródłowym, a następnie ustawiają uruchamia WYZWALACZ o nazwie "buildme", który uruchomi narzędzie o nazwie "minify-css" za każdym razem, gdy plik CSS jest zmieniany. Narzędzie zostanie przekazane listę zmieniono nazwy plików.
$ watchman watch ~/src
$ watchman -- trigger ~/src buildme '*.css' -- minify-css
Zauważ, że ścieżka musi być absolutna.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-07 08:33:19
Możesz rzucić okiem na (i może rozwinąć) moje małe narzędzie kqwait
. Obecnie po prostu siedzi i czeka na zdarzenie write na jednym pliku, ale architektura kqueue pozwala na hierarchiczne układanie zdarzeń...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-24 22:49:07
Watchdog jest wieloplatformowym API Pythona do śledzenia plików / katalogów i posiada wbudowane narzędzie "sztuczki", które pozwala na uruchamianie akcji (w tym poleceń powłoki), gdy wystąpią zdarzenia (w tym nowy dodany plik, usunięty plik i zmieniony plik).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-11 13:00:22
Jest to tylko wzmianka entr jako alternatywa dla systemu OSX do uruchamiania dowolnych poleceń przy zmianie plików. Uważam to za proste i użyteczne.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-18 09:13:30
Apple OSX akcje folderów umożliwiają automatyzację zadań na podstawie działań podejmowanych w folderze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-09 00:10:36
Edytuj: fsw
została połączona w fswatch
. W tej odpowiedzi każde odniesienie do fsw
powinno teraz brzmieć fswatch
.
Napisałem fswatch
zamiennik w C++ o nazwie fsw
, który zawiera kilka ulepszeń:
-
Jest to projekt GNU Build System, który buduje się na dowolnej obsługiwanej platformie (OS X V. > = 10.6) z
./configure && make && sudo make install
-
Wiele ścieżek może być przekazywanych jako różne argumenty:
fsw file-0 ... file-n
-
Rzuca szczegółową zapisz wszystkie informacje o zdarzeniu, takie jak:
Sat Feb 15 00:53:45 2014 - /path/to/file:inodeMetaMod modified isFile
Jego wyjście jest łatwe do przetworzenia, dzięki czemu wyjście
fsw
może być przekierowane do innego procesu.- opóźnienie można dostosować za pomocą
-l, --latency
. - Numeryczne flagi zdarzeń mogą być zapisywane zamiast tekstowych za pomocą
-n, --numeric
. - format czasu można dostosować za pomocą
strftime
ciągów formatujących z-t, --time-format
. - czas może być lokalny czas maszyny (domyślnie) lub czas UTC z
-u, --utc-time
.
Uzyskanie fsw:
fsw
jest hostowany na Githubie i można go uzyskać klonując jego repozytorium:
git clone https://github.com/emcrisostomo/fsw
Instalacja fsw:
fsw
może być zainstalowany za pomocą następujących poleceń:
./configure && make && sudo make install
Dalsze informacje:
Napisałem również wpis wprowadzający na blogu, W Którym Znajdziesz kilka przykładów na to, jak działa fsw
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-05 20:21:56
Oto jednolinijkowy za pomocą sschober
'S Narzędzie .
$ while true; do kqwait doc/my_file.md; make; done
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:36
Mój widelec fswatch zapewnia funkcjonalność inotifywait -m
z nieco mniej (nie czekaj, więcej! Mam o wiele więcej problemów na Linuksie z inotifywait
...) parse-friendly output.
Jest to ulepszenie w stosunku do oryginalnego fswatch
, ponieważ wysyła rzeczywistą ścieżkę zmienionego pliku przez STDOUT, a nie wymaga podania programu, który rozwidla.
Był solidny jak skała jako podstawa serii strasznych skryptów Basha, których używam do automatyzacji rzeczy.
(to jest off-topic) inotifywait
na Linuksie, z drugiej strony, wymaga dużo kludges na nim i nadal nie wymyślił dobry sposób, aby zarządzać nim, choć myślę, że coś na podstawie node.js
może być bilet.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-28 02:16:02
Mam do tego GIST i użycie jest dość proste
watchfiles <cmd> <paths...>
Aby zilustrować, następujące polecenie będzie echo Hello World
za każdym razem, gdy file1
lub file2
zmieni się; a domyślnym sprawdzeniem interwału jest 1 sekunda
watchfiles 'echo Hello World' /path/to/file1 /path/to/file2
Jeśli chcę sprawdzać co 5 sekund mogę użyć znacznika -t
watchfiles -t 'echo Hello World' /path/to/file1 /path/to/file2
-
-v
włącza trybverbose
, który wyświetla informacje o debugowaniu -
-q
sprawia, żewatchfiles
wykonują po cichu (#
zostaną pokazane, aby użytkownik mógł zobaczyć, że program jest executing) -
-qq
sprawia, żewatchfiles
wykonują całkowicie po cichu -
-h
pokazuje pomoc i użycie
Https://gist.github.com/thiagoh/5d8f53bfb64985b94e5bc8b3844dba55
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-05 07:45:25
Oto prosta alternatywa dla użytkowników, którzy nie mają polecenia watch
, którzy chcą wykonywać polecenie co 3 sekundy:
while :; do your-command; sleep 3; done
Jest to nieskończona pętla, która jest w zasadzie taka sama jak wykonywanie następujących czynności:
watch -n3 your-command
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-11 08:39:08