Ich habe eine Datei namens file1, die ich in einem Skript haben möchte. Wenn sich etwas daran ändert, mache ich etwas, tatsächlich einen Piepton. Wie mache ich das?
8
Ich habe eine Datei namens file1, die ich in einem Skript haben möchte. Wenn sich etwas daran ändert, mache ich etwas, tatsächlich einen Piepton. Wie mache ich das?
Wenn Sie Folgendes inotify-tools
installiert haben (zumindest ist dies der Paketname auf Debian), können Sie Folgendes tun:
while inotifywait -q -e modify filename >/dev/null; do
echo "filename is changed"
# do whatever else you need to do
done
Dies wartet darauf, dass das Ereignis "Ändern" in der Datei mit dem Namen "Dateiname" auftritt. In diesem Fall wird der inotifywait
Befehl filename MODIFY
ausgegeben (den wir verwerfen, indem wir die Ausgabe an / dev / null senden) und dann beendet, wodurch der Hauptteil der Schleife eingegeben wird.
Lesen Sie die Manpage inotifywait
für weitere Möglichkeiten.
while
. Beachten Sie auch, dass das, was ein Mensch als "Ändern" ansieht, möglicherweise nicht immer funktioniert: Dies fängt beispielsweise einen Anhang ab, aber keinen Editor wievim
(die überwachte Datei wird umbenannt oder mit einem Backup ausgetauscht) oderperl -i
(an Ort und Stelle) edit), die die Datei durch eine neue ersetzt. Sobald eines dieser Ereignisse eintritt,inotifywait
wird es nie mehr zurückkehren. Das Anschauen eines Inodes und eines Dateinamens ist nicht dasselbe, daher hängt es vom Anwendungsfall ab.move_self
. B. werden Umbenennungen abgefangen. Auf der Manpage finden Sie eine vollständige Liste der Ereignisse.Ohne inotifywait können Sie dieses kleine Skript und einen Cron-Job verwenden (jede Minute oder so):
quelle
Kam auf der Suche nach einem Einzeiler unter MacOS. Hat sich auf Folgendes geeinigt. Dieses Tool wurde kompiliert und meinem Pfad hinzugefügt . Dies dauerte weniger als 30 Sekunden.
Als nächstes ging ich zu dem Verzeichnis, in dem ich das Anschauen machen wollte. In diesem Fall wollte ich eine Markdown-Datei auf Änderungen überprüfen, und falls geändert, Ausgabe a
make
.Das ist es.
quelle
brew install kqwait
und mehrere Dateien an sie übergeben, wiekqwait **/*
Sie müssen md5sum wahrscheinlich nicht vergleichen, wenn Sie das Dienstprogramm diff zur Verfügung haben.
das ! negiert zB true, wenn die Aussage falsch ist
Vorsichtsmaßnahme ist, dass Sie die Originaldatei benötigen, um sie mit diff zu vergleichen, was (imo) dasselbe ist wie das, was das md5sum-Skript oben tut.
quelle
diff -q
, wenn esdiff
unterstützt.-q
bedeutet "melden, wenn sich nur Dateien unterscheiden", nicht wie sie sich unterscheiden. Hören Sie alsodiff -q
auf, den Moment zu vergleichen, in dem ein Unterschied festgestellt wird, was in Bezug auf die Leistung sehr nützlich sein kann. Siehe zum Beispiel die GNU-Dokumentation . Wenn der ganze Punkt Ihrer Antwort effizient ist, indem Sie nicht verwendenmd5sum
, danndiff -q
besiegt das Nichtverwenden, falls verfügbar, diesen Punkt.Sie können das
entr
Befehlszeilentool ausprobieren , zquelle
entr
muss installiert werden oder zumindest ist das bei Ubuntu der Fall. Es sollte jedoch in den meisten Distor-Repositories vorhanden sein.Wenn Sie Änderungen in einem Git-Repo überprüfen, können Sie Folgendes verwenden:
quelle
ein.
cp orginalfile fileneedto_be_changed
'(Muss nur einmal machen)b.
quelle