find 命令,大致语法:find [<start-path>...] [<expr>...]
。其本质是用指定表达式逐个评估起始路径(默认当前目录)下的所有文件,并返回最终结果为 true 的文件路径。后者是相对的还是绝对的取决于起始路径的相对/绝对情况
所以 find 命令的核心是逻辑表达式的执行,子表达式间的顺序会影响最终结果。子表达式可细分为:option、test、action,彼此间以操作符串联,无操作符则等同于-a
,形如:<option> [<oper>] <test> [<oper>] <action> ...
操作符
以下操作符按优先级从高到低排列:
\( <expr>... \)
:注意此处括号须被转义,且与内部表达式间留有空格-not <expr>
:取反<expr1> -a <expr2>
:表示和<expr1> -o <expr2>
:表示或,前一个表达式为 true 时后一个不再执行
option
必返回 true,并将影响当前指令的整体执行。-daystart
、-L
、-regex-type
除外,后者仅影响指定在其之后的 test 的执行。常用 option 如下:
-L
:后续的测试以及打印均针对软链接指向的文件,默认仅针对软链接本身
-mount
:将挂载盘从查找范围中排除
test
用于逐个测试(匹配)起始路径下的所有文件,满足则返回 true,否则返回 false。常用 test 如下:
-mtime {+|-}<n>
:上一次内容更新距今超过/少于 n*24 小时(atime、ctime 同理)-newer <filepath>
:内容比指定文件更早更新(anewer、cnewer 同理)-user <uname>
:属于指定用户(用户名或 ID)-nouser
:不属于任何用户-group <gname>
:属于指定组(组名或组 ID)-nogroup
:不属于任何组-name <pattern>
:其名称(basename)匹配指定模式-path <pattern>
:其路径匹配指定模式,注意该路径是相对还是绝对的取决于起始路径的相对/绝对情况-type <char>
:指定文件类型,对应关系如下f
:普通文件d
:目录l
:链接b
:块设备c
:字节设备s
:socketsp
:FIFO
-size {+|-}<n>
:文件大小大于/小于指定数值。可用单位如下:c
:bytew
:2-byteb
:默认单位,512-bytek
:KbM
:MbG
:Gb
action
为当前评估结果为 true 的文件执行指定操作,返回 true 或 false 取决于具体 action。常用 action 如下:
-exec <command> \;
:将该文件按占位符{}
代入指定指令中执行,注意以\;
收尾。若执行成功则返回 true-prune
:若该文件为目录,则不在其下继续展开。必返回 true
实例
找出
root/.vscode-server
目录下的名为machineid
的文件,且后者确定不在其bin
和extensions
子目录中:find /root/.vscode-server \( \ -path '/root/.vscode-server/bin' -o \ -path '/root/.vscode-server/extensions' \ \) -prune -o -name machineid -print
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。