Find命令总结
实时
精确
支持众多查找标准
遍历指定目录中的所有文件完成查找,速度相对慢;
find 查找路径 查找标准 查找到以后的处理运作
查找路径:默认为当前目录
查找标准:默认为指定路径下的所有文件
处理运作:默认为显示
匹配标准
-name ‘FILENAME’:对文件名作精确匹配
文件名通配:
*:任意长度的任意字符
?
[]
-iname ‘FILENAME’: 文件名匹配时不区分大小写
实例:
find ./ -name “*.conf”
find ./ -iname “MyC.c” 忽略大小写!
find . -perm 777
+++++++++++++++++++++++++++++++++++++++++++++++
-user USERNAME: 根据属主查找
-group GROUPNAME: 根据属组查找
-uid UID: 根据UID查找
-gid GID: 根据GID查找
-nouser:查找没有属主的文件
-nogroup: 查找没有属组的文件
实例:
1、查找/var目录下属主为root并且属组为mail的所有文件;
find /var -user root -group mail
2、查找/usr目录下不属于root,bin,或student的文件;
find /usr -not -user root -a -not -user bin -a -not -user student
find /usr -not \( -user root -o -user bin -o -user student \)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-type
f: 普通文件
d: 目录
c:字符设备
b:块设备
l:软连接文件
p:管道文件
s:套节字
实例:
find /etc -type f
find /etc -type d
find ./ ! -type d #在当前目录下查找除目录以外的所有类型的文件
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-size [+|-]
表示文件大小,+表示大于某个数,-表示小于某个数,c表示单位是字节,你可以将c换成k,M,G.
实例:
find ./ -size 0 -exec rm {} \;
find ./ -size 0 | xargs rm -f
find . -size +1000000c #在当前目录下查找文件长度大于1 M字节的文件
find /home/apache -size 100c #在/home/apache目录下查找文件长度恰好为100字节的文件
find . -size +10 #在当前目录下查找长度超过10块的文件(一块等于512字节)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
文件状态判断
-mtime: 指定时间文件内容被修改过
-ctime: 指定时间文件权限被修改过
-atime: 指定时间文件被读取过
1、找出3天“以前”被修改过的文档
find /var/log/ -mtime +3 -type f -print
2、找出3天“内”被修改过的文档
find /var/log/ -mtime -3 -type f -print
3、找出第3天被修改过的文档.
find /var/log/ -mtime 3 -type f -print
或这样写:
find /var/log/ -mtime +2 -mtime -4 -type f -print
注:
访问过用amin,修改过用mmin,文件状态改变过用cmin
精确到分钟的用amin,mmin,cmin,精确到天的用atime,mtime,ctime
find /logs -type f -mtime +5 -exec rm {} \; #在/logs目录中查找更改时间在5日以前的文件并删除它们
find / -mtime -5 -print #在系统根目录下查找更改时间在5日以内的文件
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-mount:在查找文件时不跨越文件系统mount点,这样限制在本文件系统!
这个用的不多就不举实例了!
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-prune
find /apps -path “/apps/bin” -prune -o -print #在/apps目录下查找文件,但不希望在/apps/bin目录下查找。在用这条命令时,要么各目录最好用绝对路径,要么前后对应,如:find test/ -path “./test/a” -prune -o -print 这种方式是不对的.
-depth:在查找文件时,首先查找当前目录中的文件,然后再在其子目录中查找。
-maxdepth:
find . -maxdepth 1 -name fred #在当前目录下查找
find . -maxdepth 2 -name fred #在当前目录的下一级目录查找
find -mindepth 3 -maxdepth 5 -name passwd
[root@fb13 /]# find . -maxdepth 3 -name test
./b/test
./usr/bin/test
./a/test
find /project -maxdepth 2 \( -path “/project/exapi/log” -o -path “/project/exapi/backup” \) -prune -o -print |grep “/project/exapi/” |xargs tar zcf /backup/exapi_`date +%F`.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++
使用混合查找方式: -a -o -not
find /tmp -size +10000000c -a -mtime +2
find / -user andy -o -user jack
find /tmp -not -user zjqiu
运作
-print: 显示
-ls:类似ls -l的形式显示每一个文件的详细
-ok COMMAND {} \;
-exec COMMAND {} \;
-ok,和-exec的作用相同,只不过以一种更为安全的模式来执行该参数所给出的shell命令,在执行每一个命令之前,都会给出提示,让用户来确定是否执行,如:
find . -name “*.conf” -mtime +5 -ok rm {} \;
查找并显示文件的方法:
查找到某个文件是我们的目的,我们更想知道查找到的文件的详细信息和属性,可以:
find / -name “httpd.conf” -ls
++++++++++++++++++++++++++++++++++++++++
find -perm参数的详细说明:
-perm
MODE: 精确匹配
/MODE: 任意一位匹配即满足条件
-MODE: 文件权限能完全包含此MODE时才符合条件
-644
644: rw-r–r–
755: rwxr-xr-x
750: rwxr-x—
find ./ -perl -001
#(case 1)-perm mode (比如: -perm 775)
解释:775 前面没有横线是代表只要找到百分之百一样的权限才算
好比说一个档案是 -rwxrwxr-x (775)就是100%的match
但是另一个档案是 -rwxrwxrwx (777)不是100%的match,others 多了写的权限就不是100%,所以不match!
# (case 2) -perm -mode (例如: -perm -775)
解释:-775 前面有横线表示只要标示的权限match,其他的无所谓,所以上面的第二个档案(777的)在这个case也会match的。
关于find命令中-perm中+- 的含义
举个例子:比如当前目录下有a b c d4个文件
a文件的权限为6000 也就是a文件仅有suid sgid的特殊权限
b文件的权限为2000 也就是b文件仅有sgid的特殊权限
c文件的权限为4000 也就是c文件仅有suid的特殊权限
d文件的权限为6600 也就是d文件有sgid suid的特殊权限并且该文件拥有者对该文件有读写权限
那么现在find . -type f -perm 6000 可以找到a文件,因为a文件权限为6000
那么现在find . -type f -perm -6000 可以找到a d两个文件,这是因为:
我们可以先将a b c d这4个文件的权限转化为2进制那么,
a权限转为2进制后为 110 000 000 000
b权限转为2进制后为 010 000 000 000
c权限转为2进制后为 100 000 000 000
d权限转为2进制后为 110 110 000 000
在find
. -type f -perm -6000 中的6000权限转为2进制为110 000 000
000,那么6000前的-号代表缺一不可,也就是如果有1的地方必须有1,那么这里找-6000权限的文件,这6000权限里前面有2个位置都是1,所
以这里find找-6000权限的文件就是找前面2个位置都是1的文件.而只有a d这两个文件前2个位置都是1,所以find . -type f
-perm -6000 只会找到a d两个文件.
find . -type f -perm +6000会找到a b c d这4个文件,这是因为:
+6000
里的这个+号代表有1即可,也就是有1的位置只要有1就可以.那么这里找+6000权限的文件,这6000权限前面2个位置都有1,所以这里find
找+6000权限的文件就是找前面2个位置只要有一个位置有1的文件就可以了,这4个文件都符合要求所以最后都能被 find . -type f
-perm +6000找到