find是Linux中弱小的文件查问命令,能够通过各种过滤条件查问想要的文件,还能够对查问后果执行进一步操作。本文对几个实用确容易误用的技巧进行介绍,残缺的命令应用阐明可通过info find
查阅。
find
命令的残缺语法如下:
find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]
path
默认为当前目录- 默认的
expression
是-print
,即打印搜寻后果。
日常应用中,用户次要通过管制 表达式 expression
局部参数来达成查问目标,表达式局部能够蕴含如下内容:
- 操作符:当有多个查问条件时,条件间的默认逻辑关系是 与
-and
,逻辑关系能够是 与-and
、或-or
、非-not
和 括号()
优先级。 - 惯例选项:包含 查问深度
-dept
、查问以后挂载点-mount
或-xdev
等。 - 测试表达式:查问的过滤条件,这是用户管制查问条件的次要局部,也是最简单的局部,过滤形式包含文件属主、文件工夫范畴(拜访、状态变动、批改工夫)、文件权限、文件名称、文件类型等。
- 操作:对合乎过滤条件的操作,包含删除
-delete
、打印-print
或-print0
、执行命令-exec
等。
上面就操作符、权限过滤 -perm
、执行命令 -exec
的技巧进行阐明。
1:操作符
-
与:多个条件表达式间,默认是与操作,另外
-a
和-and
也示意与操作。示例:# 查问名称为abc结尾,并且 非合乎链接类对象 find . -name 'abc*' -not -type l find . -name 'abc*' -and -not -type l
-
或:包含
-o
和-or
。示例:# 查问名称为abc结尾 或者 非合乎链接类对象 find . -name 'abc*' -or -not -type l
-
非:包含
!
和-not
。示例:# 查问非合乎链接类对象 find . -not -type l find . ! -type l
-
优先级组合:优先级组合通过括号示意,不过须要在括号的后面加上\本义,并且括号的前后要有空格。示例:
# 查问名称为abc结尾, 类型为 合乎链接 或 惯例文件的对象 find . -name abc* -and \( -type l -or -type f \)
- 两个条件并行:两个条件通过逗号隔开时,两个条件都会评估,但只有后一个条件返回true时,整个表达式才返回true。例如:
EXPR1 , EXPR2
。
2:权限过滤 -perm
-
对查问对象在Linux文件系统的权限进行过滤,过滤对象包含owne,group、other,过滤形式包含rwx或rwx的16进制,当以16进制过滤时,只有非0位才失效。示例:
# 查问owner有写权限的对象 find . -perm o=w # 上面条件中,只有owner位失效,group和other为0,示意不过滤 find . -perm 200
-
-perm
的参数,除了上述没有前缀的形式,还能够包含-
或/
前缀。- 无前缀:示意准确匹配, 如上述
-perm 200
示意只匹配owner权限为w的对象,不匹配owner蕴含r
或x
权限的对象 -
-
前缀:匹配模式中设置的 所有 bit都匹配胜利的对象,对象能够蕴含其它的权限,示例:# 匹配owne 都 group有r权限的对象(owner和group用户还能够有其余权限) find . -perm -440 find . -perm -o=r,g=r find . -perm -o+r,g+r # 下面查问条件同价如下 find . -perm -o=r -and -perm -g=r find . -perm /o=r -and -perm /g=r
-
/
前缀:匹配模式中设置的 任意 bit匹配胜利的对象,对象能够蕴含其余权限,示例:# 匹配owne 或 group有r权限的对象(owner和group用户还能够有其余权限) find . -perm /440 find . -perm /o=r,g=r find . -perm /o+r,g+r # 下面查问条件同价如下 find . -perm -o=r -or -perm -g=r find . -perm /o=r -or -perm /g=r
- 无前缀:示意准确匹配, 如上述
3:执行命令 -exec
-exec
等同于 -ok
,示意对查问后果执行其余操作命令,find命令默认执行的命令为-print,即打印查问后果列表。
-exec
中,通过{}
占位符示意文件名在命令中呈现的地位,最终命令执行时,{}
会被替换为文件名。-
-exec
中,能够包含单文件命令和多文件命令。单文件命令会对每个查问后果执行一次,当命令以分号;
结尾时,示意但文件命令;多文件命令对所有后果一起执行,但命令以加号+
结尾时,示意多文件命令。因为+
和;
在shell中都是特殊字符,所有要通过斜杆进行本义,即写成\+
或\;
。# 查问名称为abc开到的对象,并一一删除。 find . -name 'abc*' -exec rm {} \; # 查问名称为abc开到的对象,并打包为一个压缩包。 find . -name 'abc*' -exec tar czvf target.gz {} \+
参考:
- 20 Advanced Linux Find Command Examples
- 10 Linux Find Exec examples – Advanced Part
- Linux / UNIX : Examples of find command to find files with specific sets of permissions
- How To Find Files Based On their Permissions In Linux
- Find Files Based On Their Permissions
发表回复