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.

Goku__
la source
4
Que diriez-vouswatch -n1 ls
Joe
Jetez un œil à la montre ( linfo.org/watch.html )
David Segonds
4
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.
Chris Maes
la source
1
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") } }'
NuTTyX
la source
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
NuTTyX
1

C'est si simple après que je le sais.

watch -d dir_name
Goku__
la source
0

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:

sudo inotifywatch -v -r /foo

Vous pouvez ajouter -rpour 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:

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

Voici un autre exemple d'affichage du contenu de tous les test*fichiers nouvellement créés dans /tmp:

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