Answers:
你find
有-mmin
选择吗?这样可以测试自上次修改以来的分钟数:
find $LOCATION -name $REQUIRED_FILES -type f -mmin +360 -delete
$LOCATION
和$REQUIRED_FILES
都可以具有多个值,例如dir1 dir2
和*.txt *.tmp
?
您可以使用此技巧:1小时前创建一个文件,并使用-newer file
参数。
(或用于touch -t
创建这样的文件)。
touch -t $(date -d '-1 hour' +%Y%m%d%H%M.00) test
创建test
始终为1小时的文件。
这是对我有用的方法(我上面没有看到它被使用)
$ find /path/to/the/folder -name *.* -mmin +59 -delete > /dev/null
删除所有早于59分钟的文件,同时保持文件夹不变。
'*.*'
否则Shell会将其扩展为实际文件名,而不是将其保留为通配符以find
供解析。这中断了find
对子目录的递归操作。
-name '*.*'
不会删除文件没有扩展名,如README
,Makefile
等
对于SunOS 5.10
Example 6 Selecting a File Using 24-hour Mode
The descriptions of -atime, -ctime, and -mtime use the ter-
minology n ``24-hour periods''. For example, a file accessed
at 23:59 is selected by:
example% find . -atime -1 -print
at 00:01 the next day (less than 24 hours later, not more
than one day ago). The midnight boundary between days has no
effect on the 24-hour calculation.
这是@iconoclast在他们对另一个答案的评论中所想知道的方法。
使用crontab为用户或/etc/crontab
创建文件/tmp/hour
:
# m h dom mon dow user command
0 * * * * root /usr/bin/touch /tmp/hour > /dev/null 2>&1
然后使用它来运行您的命令:
find /tmp/ -daystart -maxdepth 1 -not -newer /tmp/hour -type f -name "for_one_hour_files*" -exec do_something {} \;
*/1
因为每小时在您的crontab中是多余的。与在小时字段中输入*相同。
如果某人find
没有,-mmin
并且也坚持find
只接受的整数值的-mtime
,则如果认为“大于”类似于“不大于”,则不一定丢失所有内容。
如果我们能够创建一个截止时间为mtime find
的文件,则可以要求查找“不比我们的参考文件新”的文件。
创建具有正确时间戳记的文件有点麻烦,因为没有足够功能的系统find
可能还具有功能不足的date
命令,该命令可能会执行以下操作: date +%Y%m%d%H%M%S -d "6 hours ago"
。
幸运的是,可以使用其他较旧的工具来管理此问题,尽管其方式更为笨拙。
考虑六个小时为21600秒。我们希望以有用的格式找到六个小时前的时间:
$ date && perl -e '@d=localtime time()-21600; \
printf "%4d%02d%02d%02d%02d.%02d\n", $d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'
> Thu Apr 16 04:50:57 CDT 2020
202004152250.57
perl语句确实产生了一个有用的日期,但是必须更好地使用它:
$ date && touch -t `perl -e '@d=localtime time()-21600; \
printf "%4d%02d%02d%02d%02d.%02d\n", \
$d[5]+1900,$d[4]+1,$d[3],$d[2],$d[1],$d[0]'` ref_file && ls -l ref_file
Thu Apr 16 04:53:54 CDT 2020
-rw-rw-rw- 1 root sys 0 Apr 15 22:53 ref_file
现在,此旧UNIX的解决方案大致如下:
$ find . -type f ! -newer ref_file -a ! -name ref_file -exec rm -f "{}" \;
清理参考文件也可能是个好主意...
$ rm -f ref_file