Gibt es einen eingebauten Linux-Befehl, um den Inhalt eines Verzeichnisses in Echtzeit anzuzeigen?

8

Gibt es einen eingebauten Linux-Befehl, um den Inhalt eines Verzeichnisses in Echtzeit anzuzeigen? Ähnlich wie der Befehl "tail -f Dateiname", der den Inhalt einer Datei in Echtzeit anzeigt.

Goku__
quelle
4
Wie wäre es mitwatch -n1 ls
Joe
Werfen Sie einen Blick auf Uhr ( linfo.org/watch.html )
David Segonds
4
Nicht ganz integriert, aber das inotifytoolsPaket verwendet die Linux- inotifyFunktion, um das Erstellen von Dateierstellungsereignissen zu ermöglichen.
Chepper

Antworten:

6

Sie können dies mit tun watch. Es ist nicht vollständig in Echtzeit, aber nah genug (bis zu einer Zehntelsekunde):

watch -n0.1 ls

aus dem Handbuch:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.
Chris Maes
quelle
1
Wenn Sie neue Dateien deutlicher anzeigen möchten, verwenden Sie diese Option, um neue Dateien ls -ltoben in der Liste oder ls -ltrneue Dateien unten anzuzeigen. Um diese neuen Dateien watch -dhervorzuheben, markieren Sie Änderungen im letzten Update oder watch --differences=cumulativealle Änderungen seit dem watchStart.
Garyjohn
@ jm666 - watch tail lsoder watch head lszeigt die neuesten Dateien mit den richtigen ls- Bestelloptionen an, z. B. -lt mit Kopf oder -ltr mit Schwanz .
AFH
@ jm666 - Natürlich ist es Unsinn, wenn man es wörtlich nimmt: Ich habe es als Abkürzung fürwatch {options} 'ls {options} | tail {options}'
AFH
@ jm666: Die Anforderung war für einen Befehl, der Änderungen an einem Verzeichnis wie tail -ffolgt Änderungen an der Datei folgt. Ihr ursprünglicher Befehl war, dass watchdas nicht sehr gut funktioniert hat. Ich denke, es wird, wenn der Befehl, den es ausführt, angemessen gestaltet ist. Manchmal muss man sh -ceinen komplizierteren Befehl umbrechen. Ich habe mir inotify-tools kurz angesehen und keinen Befehl gesehen, der die Änderungen an einem Verzeichnis anzeigt, nicht nur die Ereignisse, die auf ein Verzeichnis angewendet werden.
Garyjohn
2

Ich habe das geschrieben, ich hoffe das ist was du brauchst. Es ist kein built-in Linux command, aber es werden nur gängige Programme verwendet, die in den meisten UNIX-Boxen vorhanden sind.

Passen Sie die sleepZeit nach Bedarf an. Ich würde einen Wert von mindestens 2 Sekunden verwenden. Verwenden Sie diese Option cmd="ls"für nicht rekursive Strukturen oder cmd="find DIRNAME"zum rekursiven Suchen. Beachten Sie, dass Sie im letzten Fall DIRNAME/allen Dateien und Verzeichnissen ein Präfix erhalten.

 echo "" | awk '{while ( 1 ) {cmd="find ."; delete b;c=0; while ( ( cmd | getline result ) > 0 ) {test=1;c++;n=0;for (i in a) {n++;if (a[i]==result) {b[c]=i; test=0; break;}} if (test) {n++;a[n]=result;b[c]=n;print "##NEW## "result }} close (cmd); for (i in a) {test=1;for (j in b) {if (b[j]==i) {test=0;break}} if (test) {print "##DELETED## "a[i]; delete a[i]}} system("sleep 5") } }'
NuTTyX
quelle
Es wurde ein Fehler gefunden, der zu einem iWertverlust führte, nachdem eine Schleife ausgeführt wurde, in der das Skript jedes Mal auf einigen Linux-Computern alles als neu
anzeigte
1

Das ist so einfach, nachdem ich es weiß.

watch -d dir_name
Goku__
quelle
0

Sie können inotifytoolsund seine Befehlszeilenprogramme verwenden.

Sie können inotifydas Verzeichnis überwachen und Ereignisse für das Verzeichnis selbst sowie für Dateien im Verzeichnis zurückgeben.

Ein weiteres Werkzeug, das verwendet werden kann, ist inotifywatch:

sudo inotifywatch -v -r /foo

Sie können hinzufügen -r, um alle Unterverzeichnisse rekursiv zu überwachen. Diese Lösung erkennt jedoch keine Änderungen an neu erstellten Dateien .

Eine andere Lösung ist also inotifywait:

inotifywait -m --format "%f" /foo

Hier ist ein weiteres Beispiel für die Anzeige des Inhalts aller neu erstellten test*Dateien in /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
Kenorb
quelle