linux 解释“find -mtime”命令

hfyxw5xn  于 2023-06-05  发布在  Linux
关注(0)|答案(4)|浏览(217)

我正试图删除所有的日志除了最近的。在我执行脚本删除文件之前,我当然想测试我的命令,以确保我带来了准确的结果。
执行这些命令时,日期为:

Sep  1 00:53:44 AST 2014

目录列表:

Aug 27 23:59 testfile.2014-08-27.log
Aug 28 23:59 testfile.2014-08-28.log
Aug 29 23:59 testfile.2014-08-29.log
Aug 30 23:59 testfile.2014-08-30.log
Aug 31 23:59 testfile.2014-08-31.log
Sep  1 00:29 testfile.log

我以为-mtime +1应该列出一天前的所有文件。为什么8-30.log没有列出来?

find . -type f -mtime +1 -name "testfile*log"
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log

这是预期的效果,但这只是试验和错误。0是什么意思

find . -type f -mtime +0 -name "testfile*log"
./testfile.2014-08-30.log
./testfile.2014-08-27.log
./testfile.2014-08-28.log
./testfile.2014-08-29.log
edqdpe6u

edqdpe6u1#

find的POSIX规范说:
-mtime * n * 如果从初始化时间中减去文件修改时间,除以86400(丢弃任何余数)为 * n *,则主要应评估为真。
有趣的是,find的描述没有进一步指定“初始化时间”。不过,这可能是初始化(运行)find的时间。
在本说明书中,无论 * n * 在何处被用作主参数,它都应被解释为十进制整数,可选地前面有加号(“+”)或减号(“-”)符号,如下所示:

  • +n * 大于 * n *。

    • n * 准确地 * n *。
  • -n * 小于 * n *。

  • 将评论的内容转移到此答案。*

你可以写-mtime 6-mtime -6-mtime +6

  • 使用不带符号的6表示“等于6天前-因此在'now - 6 * 86400'和'now - 7 * 86400'之间修改”(因为小数天被丢弃)。
  • 使用-6表示“小于6天-因此在'now - 6 * 86400'或之后修改”。
  • 使用+6意味着“超过6天-所以在'now - 7 * 86400'或之前修改”(其中7可能有点出乎意料)。

在给定的时间(2014-09-01 00:53:44 -4:00,我推断AST是大西洋标准时间,因此ISO 8601中的时区偏移是-4:00,但ISO 9945(POSIX)中的时区偏移是+4:00,但这并不重要):

1409547224 = 2014-09-01 00:53:44 -04:00
1409457540 = 2014-08-30 23:59:00 -04:00

所以:

1409547224 - 1409457540 = 89684
89684 / 86400 = 1

即使“自纪元以来的秒数”值是错误的,相对值也是正确的(对于世界上某个地方的某个时区,它们是正确的)。
因此,为2014-08-30日志文件计算的 * n * 值正好是1(计算是用整数算术完成的),+1拒绝它,因为它严格地是> 1比较(而不是>= 1)。

0s7z1bwu

0s7z1bwu2#

+1表示2天前。是圆的。

sycxhyv7

sycxhyv73#

要查找最近24小时内修改的所有文件,请使用下面的文件。这里的-1表示在1天或更短时间内更改。

find . -mtime -1 -ls
z0qdvdin

z0qdvdin4#

#{user} is user-name
#name of script is 'place.{user}'
#used manually or from cron
#moves files that are created by automated job queue at night 
 for the user and identified by find into dated 
 subdirectories in user's home directory, so moves them 
 from"
 /u/home/{user} to /u/home/{user}/2022/05/05 on the 5th of 
 May in 2022.

cd /u/home/{user}/
place=`date '+./%Y/%m/%d/'`;
find ./*.csv -mtime -.6 -exec mv {} $place \;
find ./*.txt -mtime -.6 -exec mv {} $place \;
find ./*.tab -mtime -.6 -exec mv {} $place \;
find ./*.pdf -mtime -.6 -exec mv {} $place \;
cd $place
chmod 666 ./*
chown {user} ./*
chgrp users ./*

相关问题