21

我正在监视在 linux 的文件夹中创建的新文件。我时不时地在其中发出一个“ls -ltr”。但我希望有一个程序/脚本可以自动打印它,并且只有最新的条目。我做了一个短暂的while循环来列出它,但它会重复那些不是新的条目,并且当没有新文件时它会保持我的屏幕滚动。我已经了解了“watch”,它确实显示了我想要的内容并每 N 秒刷新一次,但我不想要一个 ncurses 界面,我正在寻找类似尾巴的东西:

  • 连续的
  • 只显示新东西
  • 在我的终端中打印,所以我可以在后台运行它并做其他事情,并时不时地查看输出,然后与我正在做的任何事情混合:D

总结:获取输入,与之前的输入进行比较,只输出新的。这样做的东西听起来不像是一个奇怪的工具,我可以看到它也被用于其他情况,所以我希望它已经存在,但我找不到任何东西。建议?

4

3 回答 3

44

您可以使用非常方便的命令watch

watch -n 10 "ls -ltr"

您将ls每 10 秒获得一次。

如果你添加一个tail -10,你只会得到 10 个最新的。

watch -n 10 "ls -ltr|tail -10" 
于 2013-09-05T21:08:04.190 回答
12

如果您可以访问inotifywait(如果您在 Debian/Ubuntu 上可以从 inotify-tools 包中获得),您可以编写如下脚本:

#!/bin/bash

WATCH=/tmp

inotifywait -q -m -e create --format %f $WATCH | while read event
do
    ls -ltr $WATCH/$event
done

这是一个单行程序,不会为您提供相同的信息ls,但它会打印出文件名:

inotifywait -q -m -e create --format %w%f /some/directory
于 2013-09-05T21:03:12.510 回答
-1

这适用于cygwinLinux。以前的一些写入文件的解决方案会导致磁盘抖动。

这个脚本没有这个问题:

SIG=1
SIG0=SIG
while [ $SIG != 0 ] ; do
 while [ $SIG = $SIG0 ] ; do
   SIG=`ls -1 | md5sum | cut -c1-32`
   sleep 10
 done
 SIG0=$SIG
 ls -lrt | tail -n 1
done
于 2016-11-17T21:30:36.133 回答