Listen Sie den Inhalt eines Verzeichnisses auf oder aktualisieren Sie ihn bei einer Änderung (dh eine neue Datei wurde erstellt oder gelöscht) in einer Textdatei

424
Nobody

Ich verwende Linux Mint und möchte, dass eine Textdatei die Änderungen von Dateien in einem Verzeichnis widerspiegelt. Sie sollte die Namen der Dateien enthalten, die im Verzeichnis vorhanden sind, und automatisch neu erstellte Dateien hinzufügen. Ich habe auf einige Links verwiesen und es wurde gesagt, ein guter Weg, dies zu tun, ist die Verwendung der inotify-tools. Ich schaute darauf auf und kam mit diesem bash-Skript.

#!/bin/sh while inotifywait -qqe modify path-of-directory ; do  ls > path-of-text-file; done 

Aber es scheint nicht zu funktionieren. Bitte führen Sie mich durch die Vorgehensweise und ist es ausreichend, wenn Sie dieses Skript einfach zur Liste der Startanwendungen hinzufügen, damit es ständig ausgeführt wird, oder sollte ich ein crontab?

0
Bei einer einfachen Umleitung wird die Datei bei jeder Änderung überschrieben. Seth vor 6 Jahren 0

1 Antwort auf die Frage

0
Kamil Maciorowski

In diesem Handbuch wird angegeben, dass modifyausgelöst wird, wenn in eine Datei geschrieben wird. Sie wollen wahrscheinlich zu überwachen create, deleteund moveVeranstaltungen.

Überprüfen Sie diese ausführlichere Antwort auf eine ähnliche Frage . Dort ist der nohupBefehl erwähnt. Ein weiterer nützlicher Befehl könnte sein disown.


Ich denke, dass das Schleifen inotifywaitein Ereignis verpasst, wenn es während der Ausführung von auftritt ls(weil inotifywaitzu diesem Zeitpunkt kein Lauf stattfindet). Es gibt -mund -dOptionen, sie sollten nichts verpassen. Dieser Ansatz sollte etwas zuverlässiger sein:

inotifywait -me create,delete,move path-of-directory | while read a ; do ls > path-of-text-file; done 

Jetzt inotifywait -mfunktioniert die ganze Zeit und gibt eine Zeile Text pro Ereignis aus. Dann wird jede solche Zeile lsausgeführt.


Eine andere Lösung wird sein iwatchund sein Daemon. Das Einrichten eines Daemons erfordert natürlich Root-Zugriff. Lesen Sie meine Antwort auf eine andere Frage und passen Sie sie an Ihre Bedürfnisse an.

Möglicherweise interessieren Sie sich auch für LoggedFS - Dateisystemüberwachung mit FUSE .

Danke Kumpel, das oben genannte funktioniert einwandfrei, nur ein Problem wird durch das Aktualisieren der Textdatei bei der Erstellung einer Datei behoben. Es wird jedoch nicht erkannt, wenn die Datei über die Schaltfläche "Löschen" entfernt wird, obwohl sie funktioniert, wenn der Befehl "rm" verwendet wird. Nobody vor 6 Jahren 0
@Nobody Mit der Schaltfläche "Löschen" können Sie die zu entfernende Datei "mv". Fügen Sie der Liste ein "move" -Ereignis hinzu (dh es wird "Erstellen, Löschen, Verschieben"). Antwort aktualisiert Kamil Maciorowski vor 6 Jahren 0