Чи є вбудована команда Linux для відображення вмісту каталогу в режимі реального часу?


8

Чи є вбудована команда Linux для відображення вмісту каталогу в режимі реального часу? Подібно до команди "tail -f file_name", яка відображає вміст файлу в режимі реального часу.


4
Як щодоwatch -n1 ls
Джо

Подивіться на годинник ( linfo.org/watch.html )
Девід Сегондс

4
Не зовсім вбудований, але inotifytoolsпакет використовує inotifyфункцію Linux, щоб дозволяти спостерігати за подіями створення файлів у міру їх відбування.
чепнер

Відповіді:


6

ви можете зробити це за допомогою watch. Це не повністю в режимі реального часу, але досить близько (до десятої частини секунди):

watch -n0.1 ls

з посібника:

-n, --interval seconds
          Specify update interval.  The command will not allow quicker than 0.1 second interval, in which the smaller values are converted.

1
Якщо ви хочете чіткіше бачити нові файли, скористайтеся, ls -ltщоб побачити нові файли вгорі списку або ls -ltrпобачити нові файли внизу. Потім, щоб виділити ці нові файли, використовуйте watch -dдля підсвічування змін в останньому оновлення або watch --differences=cumulativeдля виділення всіх змін з watchпочатку.
garyjohn

@ Jm666 - watch tail lsабо watch head lsпокажуть останні файли з правильним Ls замовленням опції, такі як -lt з головою або -ltr з хвостом .
AFH

@ jm666 - Звичайно, це нісенітниця, якщо сприймати їх буквально: я використовував це як скороченняwatch {options} 'ls {options} | tail {options}'
AFH

@ jm666: Запит був для команди, яка слідує за змінами в каталозі, як і tail -fнаступні зміни у файлі. Ваша початкова команда полягала в тому, що watchце було не дуже добре. Я думаю, що це буде, якщо команда, яку він виконує, буде складена належним чином. Іноді доводиться використовувати, sh -cщоб обернути більш складну команду. Я коротко переглянув інструменти inotify-інструменти і не побачив команди, яка б відображала зміни до каталогу, а не лише події, застосовані до каталогу.
garyjohn

2

Я написав це, сподіваюсь, що це вам потрібно. Він не є built-in Linux command, але він використовує лише загальні програми, присутні в більшості вікон UNIX.

За необхідності відрегулюйте sleepчас. Я використовував би значення принаймні 2 секунди. Використовуйте cmd="ls"для нерекурсивної структури або cmd="find DIRNAME"для рекурсивного пошуку. Зауважте, що в останньому випадку ви отримаєте DIRNAME/префікс до всіх файлів і каталогів.

 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") } }'

Виявив помилку, яка iвтратила значення, зробивши цикл, який змусив сценарій показувати все
щойно

1

Це так просто після того, як я це знаю.

watch -d dir_name

0

Ви можете використовувати inotifytoolsі його утиліти командного рядка.

Ви можете використовувати inotifyдля моніторингу каталогу, і він буде повертати події як для самого каталогу, так і для файлів усередині каталогу.

Ще один інструмент, який можна використовувати inotifywatch:

sudo inotifywatch -v -r /foo

Ви можете додати -rдля перегляду всіх підкаталогів рекурсивно. Однак це рішення не виявляє змін у новостворених файлах .

Отже, іншим рішенням є використання inotifywait:

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

Ось ще один приклад показу вмісту всіх новостворених test*файлів у /tmp:

inotifywait -m --format "%f" /tmp | grep --line-buffered ^test | xargs -L1 -I% sudo cat /tmp/% 2> /dev/null
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.