您的位置:首页 > 运维架构 > Linux

Linux find 命令总结

2016-09-25 12:38 183 查看
查找文件是非常常见的系统操作,Linux可以使用find命令来进行文件查找,用好find命令,会让你感受到前所未有的痛快。find有众多选项和参数,熟练运用它们,你才能真正感受到find命令的强大,总结如下。

命令格式:

find pathname -option [-print] [-exec -ok command {} \;]

pathname 表示文件查找的基目录,若不写,默认为当前目录./

find支持按以下方面进行查找:

1、按文件名: -name ,-iname

-name区分大小写,-iname不区分大小写

find -name test  #查找文件名为test的文件
find -iname "*test*"  #查找文件名含有test(不区分大小写)的文件
find -name "*.py"  #查找以.py结尾的文件


2、按文件类型:-type

支持类型说明示例
f普通文件find /tmp -type f
d目录find /tmp -type d
b块设备find /tmp -type b
c字符设备find /tmp -type c
l符合链接文件find /tmp -type l
p命令管道文件find /tmp -type p
s套接字文件find /tmp -type s
^

3、按文件所有者、所属组

选项参数说明示例
-userUSERNAME根据属主查找find -user mysql
-groupGROUP根据属组查找find -group root
-uidUID根据UID查找find -uid 999
-gidGID根据GID查找find -gid 888
-nouser查找没有属主的文件find -nouser
-nogroup查找没有属组的文件find -nogroup
^

4、按文件权限:-perm

改选项后面接参数:[+|-|/] modemode表示权限,可以用数字表示,如644,用二进制可以表示为110 100 100;也可以写成u=rw,g=r,o=r。对于mode,-mode,+mode,/mode,区别如下:

参数说明示例
mode严格匹配二进制的每一位find -perm 600 #权限为600
-mode匹配所有为1的位find -perm -600 #所有者权限为rw
+mode至少匹配任意一个为1的位find -perm +600 #所有者有读或写权限
/mode至少匹配任意一个为1的位find -perm /600 #所有者有读或写权限
^

还可以将文件特殊权限SUID,SGID,SBIT也考虑进去,SUID : 4 ,SGID:2,SBIT:1,如

find -perm 4700   #查找rws------的文件
find -perm u=rws  #同4700
find -perm -0700  #查找所有者权限为rwx的文件
find -perm -u=rws  #同-4700
find -perm /0700  #查找所有者有r或w或x的文件
find -perm /u=rws  #同+4700


5、按文件时间

选项参数说明
-atime[+|-]naccess time,最近一次访问时间
-ctime[+|-]nchange time,最近一次属性修改时间
-mtime[+|-]nmodify time,最近一次内容修改时间
-amin[+|-]naccess min,最近一次访问时间
-cmin[+|-]nchange min,最近一次属性修改时间
-mmin[+|-]nmodify min,最近一次内容修改时间
^

参数说明
timen发生在距离当前时间n*24小时至(n+1)*24 小时,[n*24,(n+1)*24)
-n发生在n天以前,距离当前时间为(n+1)*24小时或者更早,[(n+1)*24,∞)
+n发生在n天以内,距离当前时间为n*24小时以内,[0,n*24)
minn发生在距离当前时间n分钟至(n+1)分钟,[n,n+1)
-n发生在n分钟以前,距离当前时间为(n+1)分钟或者更早,[n+1,∞)
+n发生在n天以内,距离当前时间为n分钟以内,[0,n)
^

5、按文件大小:-size

-size后接参数:[+|-]n[bcwkMG],+表示大于,-表示小于,bcwkMG为单位,含义见下:



find -size -2M -size +2k   #查找的文件2k到2M的文件
find -size 80c #查找大小为80个字节的文件


组合查找

-a

-o

-not,!

find -name "*.zip" -a -size +100M #也可以不写-a
find -name "*.zip" -o -size +100M
find -name "*.zip" ! -size +100M


find 结果后续处理

find -name "*test*" -type f -ls  #ls列出详细信息
find -name "*test*" -type f -exec rm {} \;  #-exe
4000
c后接其他处理命令,{}表示find查询的一个结果,\;为固定写法
find -name "*test*" -type f -ok rm {} \;  #作用与-exec相同,区别在于-ok后面执行的命令需要用户确认,而-exec不需用户确认


结合管道命令 | ,xargs命令,可以实现更多的操作

find -name "*.zip" -ls | head
find / -name "mytest" | xargs -i mv {} "MyTest" #xargs的-i选项表示用{}替代管道前的结果
find / -name "mytest" | xargs -I {} mv {} "MyTest" #xargs的-I选项指明用{}替代管道前的结果


find的更多用法后面再做补充……
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux find