尾状连续ls(文件列表)

msb*_*msb 19 linux shell ls

我正在监视在linux中的文件夹中创建的新文件.我时不时地发出一个"ls -ltr".但我希望有一个程序/脚本可以自动打印它,只有最新的条目.我做了一个短暂的循环来列出它,但它会重复那些不是新的条目,并且当没有新文件时它会让我的屏幕滚动.我已经了解了"watch",它确实展示了我想要的东西并且每隔N秒刷新一次,但是我不想要一个ncurses接口,我正在寻找像tail这样的东西:

  • 连续
  • 只显示新的东西
  • 在我的终端打印,所以我可以在后台运行它并做其他事情,然后每隔一段时间看到输出然后混合我正在做的事情:D

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

ope*_*kix 40

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

watch -n 10 "ls -ltr"
Run Code Online (Sandbox Code Playgroud)

你会得到一个ls每10秒钟.

如果你添加一个,tail -10你将只获得10个最新的.

watch -n 10 "ls -ltr|tail -10" 
Run Code Online (Sandbox Code Playgroud)


Sea*_*ght 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
Run Code Online (Sandbox Code Playgroud)

这是一个单行,不会给你相同的信息ls,但它会打印出文件名:

inotifywait -q -m -e create --format %w%f /some/directory
Run Code Online (Sandbox Code Playgroud)

  • 将`-e create`更改为`-e close_write`会修复吗? (2认同)