Есть ли встроенная команда Linux для отображения содержимого каталога в реальном времени? Похожа на команду «tail -f file_name», которая отображает содержимое файла в реальном времени.
решение1
вы можете сделать это с помощью 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") } }'
решение3
Это так просто, когда я это знаю.
watch -d dir_name
решение4
Вы можете использовать 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