彻底搞明白find命令mtime含义和用法

【引言】​

大家知道,在写shell脚本时,经常会crontab定时删除一些文件,会经常用到 find 命令的-mtime参数,之前只是在用,没具体理解,今天集中时间学习下。

 

Linux里面一切皆文件,想了解文件状态时间,就得熟悉 find命令中的-atime, -ctime,-mtime这三个参数,其中-mtime用的更多。

 

使用命令stat先看下文件或者目录的信息:

[root@localhost products]# stat oracle19c/

  File: ‘oracle19c/’

  Size: 4096            Blocks: 8          IO Block: 4096   directory

Device: fd02h/64770d    Inode: 37224449    Links: 68

Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)

Context: unconfined_u:object_r:unlabeled_t:s0

Access: 2020-06-30 13:46:49.819926683 +0800

Modify: 2020-06-30 11:12:17.099937512 +0800

Change: 2020-06-30 11:12:17.099937512 +0800

 Birth: -

 

可以看到,关于时间信息有三个:最近访问时间 access time (-atime)、最近更改时间modify time-mtime)和 最近状态改动时间 change time-ctime);但也看到了Birth创建时间一项为空,说明Linux系统下是无法查看文件的创建时间的。

 

先看下man find中的解释,大家直接看英文,这里不过多解释

-atime n

File  was  last  accessed  n*24 hours ago.  When find figures out how many 24-hour periods ago the file was last accessed, any fractional part is ignored, so to match -atime +1, a file has to  have been accessed at least two days ago.

 

-ctime n

File's status was last changed n*24 hours ago.  See the comments for -atime to understand how rounding affects the interpretation of file status change times.

 

-mtime n

File’s data was last modified n*24 hours ago.See the  comments  for  -atime  to  understand  how rounding affects the interpretation of file modification times.

 

解释-atime, -ctime 和 -mtime参数含义:

atime: 代表最近一次访问文件的时间,显示一个文件的内容或者运行一个shell脚本会更新文件的atime。可用ls -lu命令查看。在kernel 2.6.30之前,文件系统默认会及时的更新atime;此后版本,只有发生以下三种情况之一才会更新atime

1. 将分区mount的挂载的时候指定采用非relatime方式

2. atime小于ctime或者小于mtime的时候

3. 本次的access time和上次的atime超过24个小时

 

mtime: 代表最近一次文件内容被修改的时间。可用ls -l 命令查看。

 

ctime: 代表最近一次文件状态的改变时间,是status change time,在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改,文件状态最后一次被改变的时间。可用ls -lc 命令查看。

 

在unix或linux环境中经常会用到find -mtime来找某时间点之前的文件,并在此基础上进行处理(如定期删除过期文件);

如何更好的理解find -mtime +N/-N/N,这里小结下:

-mtime n : n为数字,意思为在n天之前的“一天之内”被更改过内容的文件

-mtime +n : 列出在n天之前(不含n天本身)被更改过内容的文件名

-mtime -n : 列出在n天之内(含n天本身)被更改过内容的文件名

 

举个栗子:find $HOME -mtime 0

Search  for  files  in  your home directory which have been modified in the last twenty-four hours.  This command works this way because the time since each file was last modified is divided by 24 hours and  any remainder  is  discarded.   That means that to match -mtime 0, a file will have to have a modification in the past which is less than 24 hours ago.

 

将根目录下24小时内更改过内容的文件列出:

find / -mtime 0

 

场景举例:

找“5天之内被更改过的档案名”find / -mtime -5 ;

找“5天前的那一天被更改过的档案名”find / -mtime 5 ;

找“5天之前被更改过的档案名”find / -mtime +5。

 

下图来表现更直观,以便理解记忆。

 

由以上时间轴可以看出,最右边为当前时,+5 代表大于等于 天前的档案名, -5 代表小于等于 天内的档案名,则是代表 5-6 那一天的档案名。

 

【参考】

http://hi.baidu.com/ljm0211/item/d46591307a4985b9623aff33

【参考】

https://www.cnblogs.com/qiaopei/p/5515189.html


以下为个人公众号“一森咖记”,欢迎关注。

<think>好的,我现在需要详细回答用户关于findgrep命令的使用方法及详细解释。首先,我得回忆一下这两个命令的基本功能常见用法,确保信息准确。 对于find命令,用户可能想知道如何根据不同的条件搜索文件,比如文件名、类型、大小、时间等。我需要整理出基本语法,并举一些常见的使用示例,比如按名称查找、按类型过滤、按大小查找,以及执行操作如删除或执行命令。同时,要注意引用提供的资料,比如引用[1]中的基本语法操作部分。 然后是grep命令,用户需要了解文本搜索功能,包括正则表达式的使用、选项如-i、-v、-r等,以及如何结合find进行多文件搜索。这里需要提到引用[2]中提到的多文件并行搜索正则表达式部分,举一些例子说明不同选项的作用。 接下来,生成相关问题。根据用户之前的问题,可能需要关于高级用法、组合使用、正则表达式技巧、权限处理等问题。例如,如何结合findgrep高效搜索,或者如何处理文件名中的空格等问题。 需要确保回答结构清晰,分点说明每个命令用法,并正确应用LaTeX格式,比如行内公式用$...$,独立公式用$$...$$,不过这里可能用不上数学公式,但要注意代码块的使用。另外,引用标识要自然地添加到引用内容的末尾,比如[^1][^2]。 检查是否有遗漏的重要选项或常见使用场景,比如find的-exec参数,grep的递归搜索。同时,注意使用中文,避免技术术语错误,保持语言流畅自然。 最后,验证提供的示例命令是否正确,比如find中-size +10M是否正确,grep的-r选项是否适用于递归搜索。确保所有信息准确可靠,并正确引用参考资料。</think>### find命令用法详解 find是Linux系统中用于文件搜索的核心命令,支持通过多种属性进行精准检索并执行操作。 #### 一、基本语法 $$ find [搜索路径] [表达式] [操作] $$ #### 二、核心功能 1. **文件名搜索** `$ find /var/log -name "*.log"` 支持通配符`*``?`,注意加引号防止shell扩展[^1] 2. **类型过滤** `$ find ~ -type f -size +10M` `-type`参数支持: - `f`普通文件 - `d`目录 - `l`符号链接 3. **时间搜索** ```bash # 7天内修改过的文件 $ find . -mtime -7 # 30天前访问过的文件 $ find /data -atime +30 ``` 4. **权限匹配** `$ find /etc -perm 644` `$ find /bin -user root` #### 三、执行操作 1. **删除文件** `$ find /tmp -name "core*" -delete` 2. **执行命令** `$ find ./photos -name "IMG_2023*.jpg" -exec convert {} -resize 800x600 {} \;` ### grep命令用法详解 grep是文本模式匹配利器,支持正则表达式的高级搜索。 #### 一、基础语法 $$ grep [选项] "模式" [文件] $$ #### 二、常用选项 | 选项 | 功能 | 示例 | |------|-------------------------------|-------------------------------| | -i | 忽略大小写 | `$ grep -i "error" system.log`| | -v | 反向匹配 | `$ grep -v "#" config.cfg` | | -r | 递归搜索目录 | `$ grep -r "TODO" src/` | | -C 3 | 显示匹配行前后3行上下文 | `$ grep -C 3 "panic" dmesg` | | -E | 启用扩展正则表达式 | `$ grep -E "192\.168\.[0-9]{1,3}" access.log` | #### 三、组合应用 1. **多文件搜索** `$ find . -name "*.java" | xargs grep -H "ArrayList"` 通过管道与find结合实现批量文件搜索[^2] 2. **正则表达式** ```bash # 匹配IPv4地址 $ grep -E "([0-9]{1,3}\.){3}[0-9]{1,3}" access.log # 排除空行 $ grep -v "^$" config.ini ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值