363 Stimmen

Gibt es einen Befehl wie "watch" oder "inotifywait" auf dem Mac?

Ich möchte einen Ordner auf meinem Mac (Snow Leopard) überwachen und dann ein Skript ausführen (indem ich ihm den Dateinamen dessen gebe, was gerade in einen Ordner verschoben wurde (als Parameter... x.sh "Dateiname")).

Ich habe ein Skript alle in Bash (x.sh) geschrieben, die einige Dateien und andere Sachen auf Eingabe $1 verschieben wird ich brauche nur OSX, um mir den Dateinamen zu geben, wenn neue Dateien/Ordner in ein Verzeichnis verschoben/erstellt werden.

Gibt es einen solchen Befehl?

2voto

thiagoh Punkte 6642

Ich habe eine GIST für diesen Zweck und die Verwendung ist ziemlich einfach

watchfiles <cmd> <paths...>

Zur Veranschaulichung: Der folgende Befehl gibt ein Echo aus Hello World jedes Mal, wenn die file1 O file2 ändern; und die Standardintervallprüfung beträgt 1 Sekunde

watchfiles 'echo Hello World' /path/to/file1 /path/to/file2 

Wenn ich alle 5 Sekunden prüfen möchte, kann ich die -t Flagge

watchfiles -t 'echo Hello World' /path/to/file1 /path/to/file2 
  • -v ermöglicht die verbose Modus, der Debug-Informationen anzeigt
  • -q macht watchfiles im Stillen ausführen ( # wird angezeigt, damit der Benutzer sehen kann, dass das Programm ausgeführt wird)
  • -qq macht watchfiles völlig geräuschlos ausführen
  • -h zeigt die Hilfe und Verwendung

https://gist.github.com/thiagoh/5d8f53bfb64985b94e5bc8b3844dba55

2voto

user16929228 Punkte 11

Sudo fs_usage -f filesys | grep "interessante Sache" ?

1voto

Dan Rosenstark Punkte 66285

Ich habe das schließlich für macOS gemacht. Ich bin sicher, dass dies in vielerlei Hinsicht schrecklich ist:

#!/bin/sh
# watchAndRun
if [ $# -ne 2 ]; then
    echo "Use like this:"
    echo "   $0 filename-to-watch command-to-run"
    exit 1
fi
if which fswatch >/dev/null; then
    echo "Watching $1 and will run $2"
    while true; do fswatch --one-event $1 >/dev/null && $2; done
else
    echo "You might need to run: brew install fswatch"
fi

0voto

prograhammer Punkte 18696

Wenn Sie NodeJS verwenden möchten, können Sie ein Paket namens chokidar (o chokidar-cli tatsächlich) für die Überwachung und verwenden dann rsync (im Lieferumfang des Mac enthalten):

Rsync-Befehl:

$ rsync -avz --exclude 'some-file' --exclude 'some-dir' './' '/my/destination'

Chokidar cli (global über npm installiert):

chokidar \"**/*\" -c \"your-rsync-command-above\"

0voto

jmagnusson Punkte 5690

Ich kann von ganzem Herzen empfehlen, die watchexec . Eingebauter Rost und es funktioniert einfach™, egal auf welcher Plattform Sie sich befinden! Unkomplizierte CLI-Optionen ebenfalls.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X