Find 命令用来查找Linux系统的文件,基本用法为:
Find [option] [查找起始路径] [查找条件] [处理动作],其中查找条件又分为:选项 测试,现在重点讨论选项为-size,时间,权限的用法
一. 根据文件大小查找
-size [+|-]value(kMG),单位有k,M,G指定单位时,value的值只能取整数,不能用小数,查找时,文件的大小向上取整,即2.1-2.9k都会被当成3k来计算。
1.当value值没有加减号时,表示文件的大小等于value值,eg: find /tmp -size 3k 则表示/tmp目录下,文件大小为3k的文件和目录,注意文件和目录的大小向上取整计算,2.1-3k的文件都符合要求
2.当value值有加号时,表示查找大小大于value值的文件和目录,同理value值只能取整数,文件的大小也会根据向上取整原则来计算eg:find /tmp –size +3k 则表示/tmp目录下查找大小大于3k的文件和目录,3.1k-3.9k会向上取整为4k,从而符合查找条件
3.当value值有减号时,表示查找大小小于value值的文件和目录,eg:find /tmp –size -3k,同理大小为2.1-2.9k的文件向上取整为3k,从而不符合要求,2k即以下的文件符合要求
二.根据文件的时间戳来查找
以天为单位的选项:-atime -mtime -ctime 以分钟为单位的选项: –amin –mmin –cmin 这六个选项原理差不多,在此以-mtime选项为例说明
- mtime [+|-]value value的值为整数,表示从命令执行的那一刻,向前推value天,时间轴可划分为三个区间,如图:
1. 当value不带加减号时,表示文件的atime属性为距此时value天和value+1天的时间区间内时,符合查询条件如图中所示,当文件的atime属性值位于时间点a—b之间的区间内时,符合查询的条件,文字描述为据此n天。
2. 当value值带加号时,表示文件的atime属性值位于时间点a之前的区间,文字描述为据此n天前
3. 当value值带减号时,表示文件的atime属性值为在时间点a到现在的时间区间,文字描述为最近n天内。
4. 目前实验测试的时间精确到分钟,是否精确到秒则没有测试,实际环境中也用不到精确到秒。
5. touch -m -d "2024-09-27 21:00:01" a.txt 创建/修改文件的mtime时间为2024-09-27 21:00:01,可用此命令创建多个mtime时间不同的文件,来验证以上说法的正确性。
三,根据文件的权限值来查找
权限的选项为 mode,/mode,-mode,下面分别来说明 find /tmp –perm [mode|-mode|/mode]
1. mode 表示文件的权限必须和mode 完全匹配,eg:find /tmp –perm 644 则表示/tmp目录中,权限为644的文件符合要求,用九个权限字符描述即为文件的九个权限字符必须和mode一样,如图
mode的644权限为rx-r—r--,则文件的权限也必须为rx-r—r--
1. /mode 则有两层意思,其一,文件的u,g,o权限只要具备mode所指定的任一权限即可,其二,u,g,o之间为逻辑或关系,三者之间满足一项即可。eg:find /tmp -perm /644则表示文件的u权限具有r或者w或者rw权限即可,g具有r权限即可,o具有r权限即可。U,g,o满足一项即可。用九个权限字符表示则意味着,mode中为0的权限位不做比较,其余的权限位有一个匹配即可,/644为rw- r-- r--,-处的权限位不做比较,其余位置有一个相同即可
2. –mode 也有两层意思,其一,文件的u,g,o权限至少具备mode所指定的权限,其二,文件的u,g,o之间为逻辑与关系,必须同时满足。用九个权限字符表示则意味着,mode中为0的权限位不做比较,其余权限位必须完全匹配。-644为rw- r-- r--,-处的权限位不做比较,其余位置的必选全部相同。
四,处理动作
-print :输出至标准输出,默认动作
-ls : 类似对查找的文件执行ls –l命令,输出文件的详细信息
-delete :删除查找到的文件
-fls /PATH/NAME :把查找到所有文件的ls –l命令输出的信息保存到指定文件中
-ok COMMAND {} \; :对每个查找到的文件执行COMMAND命令,{}表示查找到的文件,可在命令中出现多次, \;为固定格式,命令的每次操作都需要用户确认,属于交互式命令。
-exec COMMAND {} \; :和上一个命令相同,操作不需要用户确认,不是交互式命令。
注意,find先查找出所有的文件,然后一次性传递给后面的命令执行,有些命令不支持接收多个文件参数时,会执行失败,此时可用xargs命令解决: find XXX | xargs COMMAND