如果我有3个名为1.txt,2.txt和3.txt的文件,它们相隔一小时创建,分别说下午1点和下午3点。我需要的是一个命令,它可以找到在特定文件的一小时内修改的所有文件。
我与终端中的文件位于同一目录中,所有文件都是setuid权限
我一直在努力:
找到。 -type f -perm -4000 -newer 2.txt -mmin -60 -print这应该返回3.txt但不是
在2.txt之前或之后的小时创建的文件用什么?
答案 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
。