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?

16voto

Donny Winston Punkte 2174

Dies ist nur ein Hinweis auf entr als Alternative unter OSX, um beliebige Befehle auszuführen, wenn sich Dateien ändern. Ich finde es einfach und nützlich.

  • brew install entr unter Macos
  • apt install entr unter Debian/Ubuntu

6voto

Joshua Cook Punkte 10819

Hier ist ein Einzeiler mit sschober 's Werkzeug .

$ while true; do kqwait ./file-to-watch.js; script-to-execute.sh; done

4voto

Asaph Punkte 153684

Apple OSX Ordner Aktionen ermöglichen es Ihnen, Aufgaben auf der Grundlage von Aktionen in einem Ordner zu automatisieren.

3voto

Bearbeiten: fsw wurde verschmolzen mit fswatch . In dieser Antwort ist jede Bezugnahme auf fsw sollte nun lauten fswatch .

Ich habe einen fswatch Ersatz in C++ namens fsw die mehrere Verbesserungen enthält:

  • Es ist ein GNU Build System Projekt, das auf jeder unterstützten Plattform (OS X v. >= 10.6) mit

    ./configure && make && sudo make install
  • Mehrere Pfade können als unterschiedliche Argumente übergeben werden:

    fsw file-0 ... file-n 
  • Es wird ein detaillierter Datensatz mit allen Ereignisinformationen ausgegeben, z. B:

    Sat Feb 15 00:53:45 2014 - /path/to/file:inodeMetaMod modified isFile 
  • Die Ausgabe ist leicht zu parsen, so dass fsw Ausgabe kann an einen anderen Prozess weitergeleitet werden.

  • Die Latenzzeit kann angepasst werden mit -l, --latency .

  • Numerische Ereignismarken können anstelle von textlichen mit -n, --numeric .

  • Das Zeitformat kann angepasst werden mit strftime Zeichenketten formatieren mit -t, --time-format .

  • Die Zeit kann die . Zeit des Rechners (standardmäßig) oder UTC-Zeit mit -u, --utc-time .

fsw bekommen:

fsw es gehostet auf GitHub und kann durch Klonen des Repositorys bezogen werden:

    git clone https://github.com/emcrisostomo/fsw

Installation von fsw:

fsw kann mit den folgenden Befehlen installiert werden:

    ./configure && make && sudo make install

Weitere Informationen:

Ich habe auch einen einführenden Blogbeitrag wo Sie eine Reihe von Beispielen finden können, wie fsw funktioniert.

2voto

Steven Lu Punkte 38883

Meine Gabel von fswatch bietet die Funktionalität von inotifywait -m mit etwas weniger (nein, warten Sie, mehr! Ich habe unter Linux viel mehr Probleme mit inotifywait ...) parse-freundliche Ausgabe.

Es ist eine Verbesserung gegenüber dem Original fswatch weil es den tatsächlichen Pfad der geänderten Datei über STDOUT sendet, anstatt von Ihnen zu verlangen, ein Programm bereitzustellen, das es aufspaltet.

Es hat sich als Grundlage für eine Reihe von gruseligen Bash-Skripten bewährt, mit denen ich Dinge automatisiere.

(dies ist ein Off-Topic) inotifywait unter Linux hingegen erfordert eine Menge zusätzlicher Klimmzüge, und ich habe immer noch keinen guten Weg gefunden, es zu verwalten, obwohl ich denke, dass etwas, das auf node.js könnte das Richtige sein.

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