find命令是一种精确查找工具,可以查找精确查找文件的位置,单相对于locate命令的模糊查找来说,速度要慢了许多。
find - search for files in a directory hierarchy
find [path...] [expression]
path:是指文件的路径,比如/var,/etc,/tmp等工作目录;
expression:
选项:比如-user,-root,-size,-perm
条件:本次查找的标准,可以是文件名,可以是文件大小,可以是文件的权限信息,可以是时间戳等等。
处理动作:默认是-print输出,可以是-ls 显示文件的具体属性信息,也可以是进行某种操作;
expression:
根据文件名查找:
-name pattern:根据文件名查找,支持使用、Globbing字符查找(*,[^],[],?)等
-iname pattern:忽略文件名的大小写进行查找
-samefile pattern:根据指定的文件名,查找其他硬链接的文件的路径;
根据文件的inode号查找:
-inum n:
-links n:查找硬连接数为"n"的文件;
-regex pattern:
-iregex pattern:
根据文件所有权进行查找:
-user uname:
-uid UID:就是根据用户名和/或用户ID,查找属主为这个用户账户的所有文件;
-group gname:
-gid GID:就是根据组名和/或组ID,查找属组为这个组账户的所有文件;
-nogroup:在文件的所有权的权限位上,没有属组名称仅显示属组ID的文件;
-nouser:在文件的所有权的权限位上,没有属主名称仅显示属主ID的文件;
根据文件的类型:
-type c:
c表示文件类型的单字符描述符,其中包括:
b:块设备
c:字符设备
d:目录
f:普通文件
l:符号链接
p:管道
s:套接字
-xtype
符号连接文件的查找结果需要其他选择的配合才能找到,否则查找的是被链接的原文件;
根据时间戳进行查找:
以天为时间单位进行查找:
-atime [+|-]n:根据访问时间戳进行查找
-ctime [+|-]n:根据改变时间戳进行查找
-mtime [+|-]n:根据修改时间戳进行查找
n:[n,n+1)
+n:[n+1,+oo)
-n:[now,n)
用简单的语言来说,就是下图的结果。
以分钟为单位进行查找:
amin [+|-]n:
cmin [+|-]n:
mmin [+|-]n:
根据文件的大小进行查找:
-size n[cwbkMG]
n:(n-1,n]
+n:[n,+oo)
-n:[0,n-1]
逻辑运算操作符组合前面的条件进行复杂逻辑的判断:
-a | -and:逻辑与运算,默认就是该逻辑运算,可省略;
-o | -or:逻辑或运算;
-not | !:逻辑非运算;
德默根定律依然生效;A&B=!A|!B
根据权限来查找:
-perm [/|-]mode:
mode:精确权限匹配,意思是查找必须与指定的权限位完全匹配的文件;
/mode:任何一个权限位的权限中只要有一个去权限能够满足条件,即为匹配成功,就可以将之作为查找结果;隐含的逻辑或关系;
-mode:每一个权限位的权限中都必须同时包含指定的权限位,才能满足条件,才算匹配成功,将之作为查找结果;隐含了逻辑与关系;
真 取反 假
假 取反 真
全部为真 取反 任何一个为假
全部为假 取反 任何一个为真
处理动作:
-print:将符合条件的查找结果直接输出到标准输出;默认动作;
-ls:将符合条件的查找结果以"ls -dils"命令的执行结果进行显示;
-exec command {} \;
-ok command {} \;
对于符合条件的查找结果按照"command"命令再执行一遍,{}为占位符,其含义是:用来引用find命令查找结果中的各个文件的路径信息;
ex:
查找当前系统上没有属主或属组,且最近一个月内曾被访问过的文件,并将其属主属组均修改为root;
~]# find -nouser -o -nogroup -a -atime 30 -exec chown root,root {} \
注意:
-exec是非交互式的;-ok是交互式的;
很多命令是不能放置于管道后面使用的;因为管道输送的是纯字符串信息,因此管道后面的命令一般来讲都必须是处理字符串的命令;通常,可以使用xarge命令将其转换成能够被管道后面的命令处理的参数;
转载于:https://blog.51cto.com/liujingyu/2088565