3

例如,如果我有 3 个名为 1.txt、2.txt 和 3.txt 的文件,并且它们相隔一个小时创建,分别是下午 1 点、2 点和 3 点。我需要的是一个命令,它可以查找特定文件一小时内修改的所有文件。

我和终端里的文件在同一个目录,所有文件都是setuid权限

我一直在尝试:

寻找 。-type f -perm -4000 -newer 2.txt -mmin -60 -print

这应该返回 3.txt 但它没有

在 2.txt 之前或之后的一小时内创建的文件有什么用?

4

4 回答 4

1

这是我的逻辑-

首先在某个变量中获取自 Epoch 以来最后一次访问文件的时间(以秒为单位)。

time_in_sec=$(stat -c %X 2.txt)

获取最后一小时的时间(即返回 3600 秒)

one_hr_old_time_in_sec=`expr $time_in_sec - 3600`

将其转换为适合 find 命令的格式

newerthan=$(date -d @$one_hr_old_time_in_sec '+%m-%d-%y%n %H:%M:%S')

将原始文件的时间转换为适合查找命令的格式

olderthan=$(date -d @$time_in_sec '+%m-%d-%y%n%H:%M:%S')

使用 find 命令获取两个时间段之间修改的文件列表

find . -newermt "$newerthan" ! -newermt "$olderthan" -print

如果可行,您可以编写一个小 shell 脚本,它将文件名作为参数,也可以尝试 +3600。
老实说,我还没有尝试过。希望它有效!

于 2012-10-04T20:56:28.603 回答
1

尝试这个

触摸 /tmp/temp -t time1

触摸 /tmp/ntemp -t time2

寻找 。-较新的 /tmp/temp -a !-较新的 /tmp/ntemp -exec ls -l {} \; 2>/开发/空

在哪里

time1 = 文件创建时间 - 1 小时

time2 = 文件创建时间 + 1hr

前任:

时间1 = 201210041500

时间2 = 201210041700

于 2012-10-04T22:17:42.057 回答
1

可以简化先前的解决方案,因为 -newermt 应接受与“日期”相同的格式,包括自纪元以来 N 秒的 @N。

同样对于“stat”命令,最好使用-Y(最后修改时间)而不是-X(最后访问时间)。

所以查找文件修改+或-2.txt的1小时的命令是

N=$(stat -c %Y 2.txt)  
find . -newermt @$((N-3600)) ! -newermt @$((N+3600)) -print
于 2015-11-19T13:38:03.273 回答
0

如果您在下午 4 点之后运行它,以您的示例为例,它不会返回是有道理的,因为这3.txt意味着-newer 2.txt -mmin -60“在过去 60 分钟内修改,并且比”更近2.txt”,而不是“在 60 分钟后修改2.txt”。我认为find目前没有选项可以做你想做的事(至少,我没有的版本),但在pythonor中编写脚本应该不会太难perl

于 2012-10-04T14:35:30.803 回答