find - 遍历文件结构
find
程序递归向下遍历每个路径的目录树,对树中每个文件计算表达式。基本用法:
find [options] path [expression]
Operation
这里又一些常用选项:
选项 | 描述 |
-E | 支持拓展的正则表达式,跟primaries中的`-regex`和`-iregex`一起使用。 |
-s | 使`find`按字典序遍历文件结构。`find -s`和`find | sort`的结果可能不同。 |
Expression
Expression有primaries
和operands
两种。
PRIMARIES
带数字参数的primaries都可以在数字前加+
或-
前缀。加号前缀表示超过n,减号前缀表示少于n,没有前缀表示恰好n。
Primary | 描述 |
-ctime n[smhdw] | 比较文件状态信息最后修改时间和`find`查询开始时间。 |
-d n | 如果文件相对于遍历起点的深度是n则返回true。 |
-empty | 如果当前文件或目录是空则返回true。 |
-[i]name pattern | 如果路径名最后一部分匹配pattern则返回true. 特殊匹配字符:[, ], *, ? |
-[i]regex pattern | 如果整个路径匹配正则表达式则返回true。 |
-type [bdflps] | 如果文件是指定类型则返回true. b(block), d(目录), f(普通文件), l(符号链接), p(FIFO), s(socket) |
OPERATORS
primaries可以由以下operators来组合使用:
Operator | Description |
( expression ) | 如果括号内表达式为true则返回true. |
! expression | 如果expression为false则返回true |
-not expression | |
expression -and expression | 这是一个逻辑与操作。 |
expression -or expression | 这是一个逻辑或操作。 |
例子
- 找到超过7天没有修改过的所有文件:
$ find /tmp/ -ctime +7d
- 找到所有以
1.txt
结尾的文件:$ find . -regex '.*/*1.txt'
- 找到所有以
.txt
结尾但不是符号链接的文件:$ find . -regex '.*/*.txt' -and -not -type l