【背景】
find是linux中最实用的工具之一,用于搜索符合一定条件的文件。其工作方式为沿着目录树向下遍历,匹配符合条件的文件,执行相应的操作。
【命令形式】
find [path] [option] [action]
path:指定开始查找的路径
option:指定选项,一般是设定查找的条件
action:指定动作,默认为print
【常见用法】
1.根据文件名进行搜索
涉及选项:
(1) -name:设定需要查找的文件名
(2)-iname:同上,但是不区分大小写
例子:
在当前目录下搜索所有doc文件:
find ./ -name "*.doc" c++
2.根据文件类型进行搜索
涉及选项:
(1)-type:设定文件类型
文件类型:
(1)f:普通文件
(2)l:符号链接
(3)d:目录
(4)c:字符设备
(5)b:块设备
(6)s:套接字
(7)p:FIFO
例子:
在当前目录下搜索所有普通文件:
find ./ -type f
3.根据文件大小进行搜索:
涉及选项:
(1)-size [+-]s:设定文件大小限制,+/-分别代表大于/小于s
例子:
在当前目录下找到大小为100k的文件:
find ./ -size 100k
4.根据文件时间进行搜索
涉及选项:
(1)-[x]time [+-]n:x可选a/m/c,分别代表访问时间/修改时间/属性修改时间;+/-分别代表n天之前/之内。
(2)-[x]min [+-]n:同上,但时间单位换成分钟。
例子:
在当前目录下找到24小时之内改动过的文件:
find ./ -mtime 0
5.根据文件权限进行搜索
涉及选项:
(1)-perm [+-]p:设定权限限制,+/-分别代表文件需要完全包含/包含任一所设权限
例子:
在当前目录下找到含有SBIT权限的文件:
find ./ -perm +4000
【更多用法】
6.删除匹配文件
涉及选项:
(1)-delete
之前的例子都没有使用可选的action,这是利用了默认是-print。如果需要将符合条件的文件删除,则使用-delete作为action部分。
例子:
删除当前目录下所有的doc文件:
find ./ -name "*.doc" -delete
7.执行命令
涉及选项:
(1)-exec cmd:cmd可以替换成需要执行的命令。
例子:
将5天之前的log文件删除:
find ./ -mtime +5 -name "*.log" -exec rm -f {} \;
8.限定目录深度
涉及选项:
(1)-maxdepth:限制最大深度
(2)-mindepth:限制最小深度
例子:
只在当前目录搜索doc文件:
find ./ -maxdepth 1 -name "*.doc"
9.否定
可以使用!来将参数的含义取反。
例子:
将当前目录下的非doc文件列出:
find ./ ! -name "*.doc"
10.设定多条件
涉及选项:
(1)-a:表示多个条件之间的与关系
(2)-o:表示多个条件之间的或关系
例子:
搜索doc文件或者docx文件:
find ./ \( -name "*.doc" -o -name "*.docx" \)
11.搜索时跳过特定目录
涉及选项:
(1)-prune:设定需要排除的文件(prune本身为精简的含义)
例子:
递归打印当前目录下所有文件,但不包括名为.git的文件:
find ./ \( -name ".git" -prune \) -o \( -type f -print \)