Linux命令查找最近n秒钟内更改的文件


19

我想要一个Linux命令来查找最近n几秒钟更改的文件。

是否可以从命令行界面或GUI运行Shell脚本或其他工具?

Answers:


14

使用如下查找命令:

find . -name "*.txt" -mtime -60s

查找*.txt最近60秒内修改的所有文件。


17
在Linux中,使用find(来自GNU findutils 4.4.2),此命令出现错误:find: missing argument to `-mtime'。但是,我可以使用-mmin和十进制参数来获得所需的行为。我在手册页中找不到任何参考,无法s用作参数。
jimbob博士2013年

4
-60s不是的有效参数-mtime。在POSIX或GNU中,“ 60年代”甚至不是有效的选项。参数to -mtime是一个数字,它指定文件被修改后的24小时周期数。
dannysauer 2014年

13

使用mtime指定秒数的解决方案在使用find --version==的我的linux系统上不起作用find (GNU findutils) 4.4.2

我收到以下错误:

mycomputer:~/new$ find . -mtime -60s
find: missing argument to `-mtime'
mycomputer:~/new$ find . -mtime -60seconds
find: missing argument to `-mtime'

但是,我可以使用-mmin(在最近m分钟内进行修改),并且可以接受十进制参数;例如,以下查找在最近30秒内修改的文件。

find . -mmin 0.5

例如 创建文件的最后修改时间为1s,6s,11s,...在过去120秒内,此命令将发现:

mycomputer:~/new$ for i in $(seq 1 5 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
mycomputer:~/new$ find . -mmin 0.5
.
./last_modified_1_seconds_ago
./last_modified_26_seconds_ago
./last_modified_11_seconds_ago
./last_modified_16_seconds_ago
./last_modified_21_seconds_ago
./last_modified_6_seconds_ago

因此,如果您真的在几秒钟内需要它,可以执行以下操作:

localhost:~/new$ for i in $(seq 1 1 120); do touch -d "-$i seconds" last_modified_${i}_seconds_ago ; done
localhost:~/new$ N=18; find . -mmin $(echo "$N/60"|bc -l)
./last_modified_1_seconds_ago
./last_modified_9_seconds_ago
./last_modified_14_seconds_ago
./last_modified_4_seconds_ago
./last_modified_12_seconds_ago
./last_modified_13_seconds_ago
./last_modified_8_seconds_ago
./last_modified_3_seconds_ago
./last_modified_5_seconds_ago
./last_modified_11_seconds_ago
./last_modified_17_seconds_ago
./last_modified_16_seconds_ago
./last_modified_7_seconds_ago
./last_modified_15_seconds_ago
./last_modified_10_seconds_ago
./last_modified_6_seconds_ago
./last_modified_2_seconds_ago

8

与glenn的建议类似,例如,如果您想查找所有已修改的内容,例如在运行安装程序过程中,执行以下操作可能会更容易:

touch /tmp/checkpoint
<do installer stuff>
find / -newer /tmp/checkpoint

这样就不必进行时间计算了;您只是在检查点文件之后发现事情发生了变化。


6

如果您有不支持的find版本,-mtime -60s那么更好的解决方案是

touch -d '-60 seconds' /tmp/newerthan
find . -name "*.txt" -newer /tmp/newerthan

6

最简单的方法是:

find . -name "*.txt" -newermt '6 seconds ago'

-mtime -60s答案中提到的选项find即使在2016年也不适用于许多版本,-newermt对我们来说是更好的选择。它可以解析许多不同的日期和时间格式。

使用的另一种方法mmin是:

find . -name "*.txt" -mmin -0.5

# Finds files modified within the last 0.5 minute, i.e. last 30 seconds

此选项可能不适用于所有find版本。


2
显然,这是最好的解决方案。
rednoah


1

如果您的的版本find不接受秒或实数值,就像我的一样,请使用-mmin,但指定为0,则将在不到一分钟的时间内修改所有文件:

$ touch test; find . -type f -mmin 0
./test
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.