是否有内置的Linux命令实时显示目录内容?


8

有没有内置的Linux命令可以实时显示目录的内容?类似于“ tail -f file_name”命令,它可以实时显示文件的内容。


4
怎么样watch -n1 ls


4
inotifytools软件包不是完全内置的,但是使用Linux的inotify功能允许在发生文件创建事件时对其进行监视。
chepner 2014年

Answers:


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 lswatch head ls将显示具有正确ls排序选项的最新文件,例如-lt带有head-ltr带有tail
AFH

@ jm666-如果按字面意思理解,当然是胡说八道:我将其用作watch {options} 'ls {options} | tail {options}'
AFH 2014年

@ jm666:该请求是针对以下命令的命令,该命令跟随对目录的tail -f更改,随后跟随对文件的更改。您最初的命令是watch做得不太好。我认为,如果运行的命令经过适当设计,它将可以。有时您不得不使用sh -c包装更复杂的命令。我简短地看了看inotify-tools,却没有看到显示目录更改的命令,而不仅仅是显示应用于目录的事件。
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在某个Linux机器上执行循环使脚本每次都将所有内容显示为新内容之后,发现了一个失去了价值的bug
NuTTyX 2014年


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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.