8

Есть ли встроенная команда Linux для отображения содержимого каталога в режиме реального времени?Аналогично команде tail -f file_name, которая отображает содержимое файла в режиме реального времени.

4 ответа4

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .