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.
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.
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") } }'
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
watch -n1 ls
inotifytools
Paket verwendet die Linux-inotify
Funktion, um das Erstellen von Dateierstellungsereignissen zu ermöglichen.Antworten:
Sie können dies mit tun
watch
. Es ist nicht vollständig in Echtzeit, aber nah genug (bis zu einer Zehntelsekunde):aus dem Handbuch:
quelle
ls -lt
oben in der Liste oderls -ltr
neue Dateien unten anzuzeigen. Um diese neuen Dateienwatch -d
hervorzuheben, markieren Sie Änderungen im letzten Update oderwatch --differences=cumulative
alle Änderungen seit demwatch
Start.watch tail ls
oderwatch head ls
zeigt die neuesten Dateien mit den richtigen ls- Bestelloptionen an, z. B. -lt mit Kopf oder -ltr mit Schwanz .watch {options} 'ls {options} | tail {options}'
tail -f
folgt Änderungen an der Datei folgt. Ihr ursprünglicher Befehl war, dasswatch
das nicht sehr gut funktioniert hat. Ich denke, es wird, wenn der Befehl, den es ausführt, angemessen gestaltet ist. Manchmal muss mansh -c
einen 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.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
sleep
Zeit nach Bedarf an. Ich würde einen Wert von mindestens 2 Sekunden verwenden. Verwenden Sie diese Optioncmd="ls"
für nicht rekursive Strukturen odercmd="find DIRNAME"
zum rekursiven Suchen. Beachten Sie, dass Sie im letzten FallDIRNAME/
allen Dateien und Verzeichnissen ein Präfix erhalten.quelle
i
Wertverlust führte, nachdem eine Schleife ausgeführt wurde, in der das Skript jedes Mal auf einigen Linux-Computern alles als neuDas ist so einfach, nachdem ich es weiß.
quelle
Sie können
inotifytools
und seine Befehlszeilenprogramme verwenden.Sie können
inotify
das 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
: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
:Hier ist ein weiteres Beispiel für die Anzeige des Inhalts aller neu erstellten
test*
Dateien in/tmp
:quelle