查找在另一个文件的一小时内修改的文件

时间:2012-10-04 12:46:57

标签: linux unix find

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

我与终端中的文件位于同一目录中,所有文件都是setuid权限

我一直在努力:

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

这应该返回3.txt但不是

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

4 个答案:

答案 0 :(得分:1)

这是我的逻辑 -

首先从某个变量中的Epoch获取上次访问文件的时间。

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

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

one_hr_old_time_in_sec=`expr $time_in_sec - 3600`

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

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。
老实说,我还没试过。希望它有效!

答案 1 :(得分:1)

试试这个

touch / tmp / temp -t time1

touch / tmp / ntemp -t time2

找到。 -newer / tmp / temp -a! -newer / tmp / ntemp -exec ls -l {} \; 2 - ;的/ dev / null的

,其中

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

time2 =文件创建时间+ 1小时

前:

time1 = 201210041500

time2 = 201210041700

答案 2 :(得分:1)

之前的解决方案可以简化,因为-newermt将接受与'date'相同的格式,包括@N,自纪元以来N秒。

同样对于'stat'命令,最好使用-Y(上次修改的时间)而不是-X(上次访问的时间)。

因此找到修改文件的命令+或 - 1小时2.txt是

N=$(stat -c %Y 2.txt)  
find . -newermt @$((N-3600)) ! -newermt @$((N+3600)) -print

答案 3 :(得分:0)

如果您在下午4点之后运行此操作,那么根据您的示例,它将不会返回3.txt,因为-newer 2.txt -mmin -60表示“在过去60分钟内修改过,并且最近比{更新{ {1}}“,而不是”2.txt后不到60分钟的修改。我认为2.txt目前没有选择去做你想要的东西(至少我没有这个版本),但是在find或者python中编写脚本不应该太难perl