例如,如果我有 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 之前或之后的一小时内创建的文件有什么用?
这是我的逻辑-
首先在某个变量中获取自 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。
老实说,我还没有尝试过。希望它有效!
尝试这个
触摸 /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
可以简化先前的解决方案,因为 -newermt 应接受与“日期”相同的格式,包括自纪元以来 N 秒的 @N。
同样对于“stat”命令,最好使用-Y(最后修改时间)而不是-X(最后访问时间)。
所以查找文件修改+或-2.txt的1小时的命令是
N=$(stat -c %Y 2.txt)
find . -newermt @$((N-3600)) ! -newermt @$((N+3600)) -print
如果您在下午 4 点之后运行它,以您的示例为例,它不会返回是有道理的,因为这3.txt
意味着-newer 2.txt -mmin -60
“在过去 60 分钟内修改,并且比”更近2.txt
”,而不是“在 60 分钟后修改2.txt
”。我认为find
目前没有选项可以做你想做的事(至少,我没有的版本),但在python
or中编写脚本应该不会太难perl
。