Linux 命令查找过去 n 秒内更改的文件

Linux 命令查找过去 n 秒内更改的文件

我想要一个 Linux 命令来查找过去n几秒内更改的文件。

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

答案1

使用 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

例如,创建最后修改时间为 1 秒、6 秒、11 秒……过去 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

答案2

使用如下查找命令:

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

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

答案3

最简单的方法是:

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版本。

答案4

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

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

相关内容