1、简介
find 命令功能是进行查找
find 命令主要作用是沿着文件层次结构向下遍历、匹配符合条件的文件,并执行相应的操作
2、用法/命令格式
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression
3、常用参数解析 — 参数 选项
**
-H、-L 和 -P 选项 用于 符号 连接 处理;
如果 搜索 路径 没有 被 指定,则默认 当前 所在 路径 为 搜索路径
4 、常用参数解析 — 参数 表达式
**-print
默认 -print 参数
-exec
-exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令;在这里说明一下{}和;,
{}其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件;
而”;” 是-exec 的命令结束标记,因为规定-exec 后面的命令必须以;结束,
但;在 shell 中有特殊含义,必须要转义,所以写成\;
Global options — 全局 表达式
全局表达式 影响 任何 结果输出,通常 返回 true
-type
- 字母 “f” 表示该文件是一个普通文件
- 字母 “l” 表示该文件是一个链接文件
- 字母 “b” 表示该文件是块设备文件(block)
- 字母 “c” 表示该文件是一个字符设备文件(character)
- 字母 “d” 表示该文件是一个目录
- 字母 “p” 表示该文件为命令管道文件
- 字母 “s” 表示该文件为sock文件
例子:
在/目录中查找名称为test的所有目录。
#find -type d -name “test”
Positional options — 位置(正则) 表达式
Positional optiona affect only tests or actions which follow them. Positional options always return true.
Operators — 逻辑 表达式
Operators join together the other items within the expression. They include for example -o (meaning logical OR) and -a (meaning logical AND).
备注
- -and:匹配如果操作符两边的测试条件都是真。可以简写为-a。注意若没有使用操作符,则默认使用-and
- -or:匹配若操作符两边的任一个测试条件为真。可以简写为 -o
- -not:匹配若操作符后面的测试条件是假。可以简写为一个感叹号(!)
- ():把测试条件和操作符组合起来形成更大的表达式。这用来控制逻辑计算的优先级。默认情况下, find命令按照!从左到右的顺序计算。经常有必要重写默认的求值顺序,以得到期望的结果。即使没有必要,有时候包括组合起来的字符,对提高命令的可读性是很有帮助的。注意因为圆括号字符对于shell来说有特殊含义,所以在命令行中使用它们的时候,它们必须用引号引起来,才能作为实參传递给find命令。通常反斜杠字符被用来转义圆括号字符
- TEST
-inum — inode number
## 根据 inode 搜索文件
# find /etc -inum 786776
# find /etc -inum 786776 /etc/hosts
5
范例
5.1 打印 当前 目录 文件 列表信息**
# -print 也可 不写,一般 默认 打印
# find . [-print]
5.2 模糊 匹配
## -i : 忽略 大小写
## *、?: 模糊匹配,
* 匹配 多个 任意字符,
?匹配 单个 任意字符
# find . [-i] -name "*.tx?" [-print]
5.3 多个 文件 类型查找
## -or : 逻辑 或
## !: 逻辑 非
# find . \( -name "*.txt" -or ! -name ".csv" \)
5.4 联合 查找 并 查看
**
## -perm: 用户权限
## -user: 用户名
# find . -type f \( -name "*.php" -perm 755 -or ! -user root \) -exec ls -l {} \;
5.5 查找 大文件
# find . -type f -size +800M
备注
-exec 是 find 命令对找到的文件执行的动作,这个动作就是对找到的文件执行命令,上面的命令就是 ls -l {}。在这里说明一下{}和;,{}其实它就是一个占位符,在 find 命令的执行过程中会不断地替换成当前找到的文件,相当于”ls -l 找到的文件”。
而;是-exec 的命令结束标记,因为规定-exec 后面的命令必须以;
结束,但;在 shell 中有特殊含义,必须要转义,所以写成\;
联合语句
#查找所有777个权限文件,并使用chmod命令将权限设置为644
#find / -perm 777 -print -exec chmod 644 {} \;
#查找和删除多个文件,如.txt,然后使用。
#find . -type f -name “*.txt” -exec rm -f {} \;
#查找所有空目录
#find / -type d -empty
#查找所有被修改超过50天以及少于100天的文件。
find . -name “a.txt” -mtime +50 -mtime -100
查找最近1小时内更改的所有文件
find / -cmin -60
#查找超过100MB的所有.mp4文件,并使用一个命令删除它们
#find / -type f -name “*.mp4” -size +100M -exec rm -f {} \;