Existe-t-il une commande Linux intégrée pour afficher le contenu d'un répertoire en temps réel?
8
Existe-t-il une commande Linux intégrée pour afficher le contenu d'un répertoire en temps réel? Similaire à la commande "tail -f nom_fichier" qui affiche le contenu d'un fichier en temps réel.
Pas tout à fait intégré, mais le inotifytoolspackage utilise la inotifyfonctionnalité de Linux pour permettre de regarder les événements de création de fichiers lorsqu'ils se produisent.
chepner
Réponses:
6
vous pouvez le faire en utilisant watch. Ce n'est pas complètement en temps réel, mais assez proche (jusqu'à un dixième de seconde):
watch -n0.1 ls
du manuel:
-n,--interval seconds
Specify update interval.The command will not allow quicker than 0.1 second interval,in which the smaller values are converted.
Si vous souhaitez voir plus clairement les nouveaux fichiers, utilisez ls -ltpour voir les nouveaux fichiers en haut de la liste ou ls -ltrpour voir les nouveaux fichiers en bas. Ensuite, pour mettre en surbrillance ces nouveaux fichiers, utilisez watch -dpour mettre en évidence les modifications dans la dernière mise watch --differences=cumulativeà jour ou pour mettre en évidence toutes les modifications depuis le watchdébut.
garyjohn
@ jm666 - watch tail lsou watch head lsaffichera les derniers fichiers avec les options de commande ls correctes , comme -lt avec head ou -ltr avec tail .
AFH
@ jm666 - Bien sûr, cela n'a pas de sens si on le prend watch {options} 'ls {options} | tail {options}'
AFH
@ jm666: La demande concernait une commande qui suit les modifications apportées à un répertoire comme tail -fsuit les modifications apportées au fichier. Votre commandement d'origine était que cela watchne fonctionnait pas très bien. Je pense que oui, si la commande qu'il exécute est conçue de manière appropriée. Parfois, vous devez utiliser sh -cpour encapsuler une commande plus compliquée. J'ai regardé brièvement inotify-tools et je n'ai pas vu de commande qui montrerait les changements dans un répertoire, pas seulement les événements appliqués à un répertoire.
garyjohn
2
J'ai écrit ceci, j'espère que c'est ce dont vous aviez besoin. Ce n'est pas un built-in Linux command, mais il utilise uniquement des programmes courants présents dans la plupart des boîtes UNIX.
Ajustez le sleeptemps au besoin. J'utiliserais une valeur d'au moins 2 secondes. Utilisez cmd="ls"pour une structure non récursive ou cmd="find DIRNAME"pour effectuer une recherche récursive. Notez que dans le dernier cas, vous obtiendrez un DIRNAME/préfixe pour tous les fichiers et répertoires.
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") } }'
Trouvé un bug qui a fait iperdre de la valeur après avoir fait une boucle qui a fait que le script montre tout comme nouveau à chaque fois sur certaines machines Linux
Vous pouvez utiliser inotifytoolset ses utilitaires de ligne de commande.
Vous pouvez utiliser inotifypour surveiller le répertoire, et il renverra des événements pour le répertoire lui-même et pour les fichiers à l'intérieur du répertoire.
Un autre outil qui peut être utilisé est inotifywatch:
watch -n1 ls
inotifytools
package utilise lainotify
fonctionnalité de Linux pour permettre de regarder les événements de création de fichiers lorsqu'ils se produisent.Réponses:
vous pouvez le faire en utilisant
watch
. Ce n'est pas complètement en temps réel, mais assez proche (jusqu'à un dixième de seconde):du manuel:
la source
ls -lt
pour voir les nouveaux fichiers en haut de la liste ouls -ltr
pour voir les nouveaux fichiers en bas. Ensuite, pour mettre en surbrillance ces nouveaux fichiers, utilisezwatch -d
pour mettre en évidence les modifications dans la dernière misewatch --differences=cumulative
à jour ou pour mettre en évidence toutes les modifications depuis lewatch
début.watch tail ls
ouwatch head ls
affichera les derniers fichiers avec les options de commande ls correctes , comme -lt avec head ou -ltr avec tail .watch {options} 'ls {options} | tail {options}'
tail -f
suit les modifications apportées au fichier. Votre commandement d'origine était que celawatch
ne fonctionnait pas très bien. Je pense que oui, si la commande qu'il exécute est conçue de manière appropriée. Parfois, vous devez utilisersh -c
pour encapsuler une commande plus compliquée. J'ai regardé brièvement inotify-tools et je n'ai pas vu de commande qui montrerait les changements dans un répertoire, pas seulement les événements appliqués à un répertoire.J'ai écrit ceci, j'espère que c'est ce dont vous aviez besoin. Ce n'est pas un
built-in Linux command
, mais il utilise uniquement des programmes courants présents dans la plupart des boîtes UNIX.Ajustez le
sleep
temps au besoin. J'utiliserais une valeur d'au moins 2 secondes. Utilisezcmd="ls"
pour une structure non récursive oucmd="find DIRNAME"
pour effectuer une recherche récursive. Notez que dans le dernier cas, vous obtiendrez unDIRNAME/
préfixe pour tous les fichiers et répertoires.la source
i
perdre de la valeur après avoir fait une boucle qui a fait que le script montre tout comme nouveau à chaque fois sur certaines machines LinuxC'est si simple après que je le sais.
la source
Vous pouvez utiliser
inotifytools
et ses utilitaires de ligne de commande.Vous pouvez utiliser
inotify
pour surveiller le répertoire, et il renverra des événements pour le répertoire lui-même et pour les fichiers à l'intérieur du répertoire.Un autre outil qui peut être utilisé est
inotifywatch
:Vous pouvez ajouter
-r
pour regarder tous les sous-répertoires de manière récursive. Cependant, cette solution ne détecte pas les modifications sur les fichiers nouvellement créés .Une autre solution consiste donc à utiliser
inotifywait
:Voici un autre exemple d'affichage du contenu de tous les
test*
fichiers nouvellement créés dans/tmp
:la source