目录
- 一:基本语法
- 二:搜索路径
- 1、限制递归层级
- 2、排除指定路径
- 三:匹配条件
- 1、按照文件名搜索
- 2、按文件类型搜索
- 3、按文件大小搜索
- 4、按文件权限搜索
- 5、按文件所有者或所属组搜索
- 6、按文件修改时间搜索
- 四:执行操作
- 1、输出满足条件的路径到屏幕
- 2、对找到的文件执行操作
一:基本语法
find [搜索路径] [匹配条件] [操作]
- 搜索路径:指定搜索的起始路径,默认为当前目录,会以该目录为起点,递归查询所有目录;
- 匹配条件:指定指定的条件来查找特定的文件
- 操作:对查找到的符合条件的文件执行的操作,默认是打印输出到屏幕;
二:搜索路径
1、限制递归层级
-
-maxdepth n
指定在搜索路径中最多递归到第几层子目录。 -
-mindepth n
忽略低于指定深度的目录或文件。
例如:只搜索当前目录内容
-maxdepth 1 -mindepth 1
只搜索当前目录满足条件内容时,除了使用-maxdepth 1 ,还需要使用 -mindepth 1,否则的话如果当前目录的目录名满足条件,也会被匹配到
2、排除指定路径
-path
:匹配要排除的路径,使用该选项指定的路径会默认输出到屏幕;-prune
:跳过指定的路径进行递归搜索()
:将多个条件组合成一个整体,类似于逻辑表达式中的分组,需要使用转义字符转义小括号。
例如:排除/sys 、/proc 和 /run目录不搜索
find / \( -path /proc -o -path /sys -o -path /run \) -prune -o -name "*.log" -print
# 排除指定路径\( -path /proc -o -path /sys -o -path /run \) -prune # 如果匹配到的路径是/proc或/sys或/run,就通过 -prune选项来排除这些路径# 输出非指定路径的文件-o -name "*.log" -print # 如果匹配到的路径非上面指定的路径,就进行输出# print输出
find 默认会输出匹配条件的路径,如果"排除指定路径" 这个条件成立了,也会执行默认的print输出,所以加上 -print 后就只会输出"输出非指定路径的文件"这个条件的内容
三:匹配条件
使用find
命令指定匹配条件时候,多个匹配条件默认就是 -a (AND)
操作,只有都满足条件的文件才会被匹配到。
也可以使用 -o(OR)
来指定匹配条件,但是因为 -a
的优先级高于 -o
,所以如果需要改变优先级,就可以使用小括号将 某个条件做为一个整体。小括号需要使用转义字符进行转义。
1、按照文件名搜索
-
-name [文件名]
:按文件名搜索(支持通配符*
、?
或[]
) -
-iname [文件名]
:按文件名搜索(忽略大小写)。
说明:使用 -name 来匹配文件名的时候,要使用 单引号或者双引号将通配符括起来,以确保通配符正确解析。目的就是防止 Shell 提前扩展通配符
2、按文件类型搜索
-type [类型]
:按文件类型搜索
3、按文件大小搜索
-size [大小]
:按文件大小搜索。
+ 表示大于,- 表示小于,直接数值表示等于。c:字节数,k:KB,M:MB,G:GB。
4、按文件权限搜索
-perm [权限]
:按权限搜索
5、按文件所有者或所属组搜索
-
-user [用户]
:按所有者用户搜索 -
-group [组名]
:按所属组搜索
6、按文件修改时间搜索
-mtime [天数]
:按文件修改时间搜索。
-mtime +n:n 天前修改
-mtime -n:n 天内修改
四:执行操作
1、输出满足条件的路径到屏幕
-print
:显示匹配的文件路径(默认操作)
2、对找到的文件执行操作
-exec [命令] {} \;
:对找到的文件执行操作。
例如:删除180天以前的执行文件
find /resources/camera/record -name "*.mp4" -type f -mtime +180 -exec rm -f {} \;