【find】文件查找

来源:互联网 发布:php的数组函数 编辑:程序博客网 时间:2024/06/05 16:18
【find】文件查找
实时
精确
支持众多查找标准
遍历指定目录中的所有文件完成查找,速度慢
================================================================================================
find . -maxdepth 1 -name "@*" 
这个命令意思是,查找当前目录下以@开头的文件或者目录,搜索深度为一级也就是只在当前目录找,不进入子目录,如果你要从/目录开始找就:
find / -maxdepth 1 -name "@*" 
如果想搜全盘,就把-maxdepth 1 去掉
命令:find –name 路径 文件名。………… 查找文件。
命令:find –name file* ………… 表示在当前目录下查找以file为头的所有文件。
命令:find –user teacher ………… 表示查找当前目录下所有teacher所建立的文件。
=====================================================================================================


find 查找路径 查找标准 查找到以后处理运作


查找路径:默认为当前目录
查找标准:默认为指定路径下的所有文件
处理运作:默认为显示


匹配标准:
【-name 'FILENAME'】:对文件名做精确匹配
文件名通赔:
*:任意长度任意字符
?
[]
【-iname 'FILENAME'】:表示文件名匹配不区分大小写
【-regex PATTERN】:基于正则表达式进行文件名匹配
【-user USERNAME】:基于文件的属主名来查找
【-group GROUPNAME】:更具属组名查找
【-uid UID】:更具属主的id号来查找
【-gid GID】:根据属组的id号来查找


【-nouser】:查找没有属主的文件
【-nogroup】:查找没有属组的文件


【-type】更具文件类型查找
f:普通文件
d:目录
c:字符设备
b:块设备
l:符号连接
p:管道设备
s:套接字设备
例如 find /tmp/ -type d  //表示查找tmp目录下面的目录


【-size】更具文件大小查找
#k,#M,#G 
如果不给单位,默认是字节
[+|-]#k //如果是+10k表示查找大于10k的文件,如果是-10k表示查找为小于10k的文件
例如:
find /etc -size 10k -ls  表示查找的文件在10k到9k之间

组合条件:
【-a】相当于&&
【-o】相当于||
【-not】相当于 !
例如:
find /tmp -nouser -a -type d  -ls  //表示查找到的文件必须没有属主并且是目录的文件(-ls 表示显示查找到的文件显示详细信息)
find /tmp -nouser -o -type d  -ls  //表示查找到问文件是没有属主或者是目录的文件


例如:/tmp/test目录下,属主不是user1,也不是user2的文件
find /tmp/test -not -user user1 -a -not -user user2  -ls
或者find /tmp/test -not \( -user user1 -o -user user2 \) -ls


根据文件的时间戳来查找
【-mtime】:根据文件的修改时间
【-ctime】:根据文件的改变时间
【-atime】:根据文件的访问时间
【+|-】#也支持
+5 离现在为止,至少有5天没访问
-5 离现在为止,最近5天内曾经访问过
5  离现在为止,刚好5访问过

【-mmin】:根据文件的修改时间(按分钟计算)
【-cmin】
【-amin】
【+|-】#
例如:find ./ -amin -5表示查找5分钟之内访问过的文件
     find ./ -amin 5表示刚好过去5分钟那一刻访问过的文件
     find ./ -amin +5表示至少有5分钟没访问过的文件,即5分钟之前访问过的文件

根据文件的权限查找
【-perm MODE】表示精确匹配才能满足条件
【-perm /MODE】任意一位权限匹配就可满足条件
【-perm -MODE】包含匹配
例如: find ./ -perm 644 表示权限为644的文件做精确匹配
      find ./ -perm /644 但凡三个权限中有个一匹配就可以
      find ./ -perm -644 及包含关系及755(rwxr-xr-x)包含644(rw-r--r--)则,755也可查询出来,750(rwxr-x---)就不能匹配

例如:find ./ -perm -00l 表示查找其他用户有执行权限的文件
     find ./ -perm -022 表示组有写权限并且其他用户也有写权限
     find ./ -perm /022 表示组有写权限或者其他用户有写权限

运作:
【-print】显示
【-ls】以类似 ls -l 的形式显示每一个文件的详细信息
【-ok COMMAND {} \;】 (COMMAND为平时写的命令)可以对查找的文件做相应操作(表示每一个操作都需要用户确认)
【-exec COMMAND {} \; 】 功能同-ok   其中{}表示引用已经找到的文件(表示每一个操作不需要用户确认)


例如: find ./ -perm -006 -exec chmod o-w {} \;表示把查找处理的文件去掉其他用户的w权限,其中{}表示引用查找到的文件


例如:find ./ -type d -ok chmod +x {} \;   //找到类型是目录的文件吧该文件的属主,属组,其他用户都加上x可执行权限。


例如:
find ./ -user gandian -a -perm -020 -exec mv {} {}.new \;
表示将当前木下属主是gandian并且属组有写权限的文件的文件名,后面都加上【.new】字符
相关命令
【xargs】命令
例如 
find /etc -size +1M -exec echo {} >> /tmp/etc.largefiles \;
等同于
find /etc -size +1M | xargs echo >>/tmp/etc.largefiles


=========================================================相关示例====================================================
1、查找/var目录下属主为root并且属组为mail的所有文件;
find /var -user root -a -group mail -ls
2、查找/usr目录下属主不是root,bin,或student的文件;
find /usr -not \(  -user root -o -user bin -o -user student \) -ls
3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件
find /etc -not -user root -a -not  -user student -a -mtime -7  -ls
4、查找当前系统上没有属主或属组且最近一天内曾被访问过的文件,并将其属主属组均修改为root
find /  \(  -nouser -o -nogroup \) -a -atime -1  -exec chown root:root {} \;
5、查找/etc目录下大雨1M的文件,并将其文件名写入/tmp/etc.largefiles文件中。
find  /etc -size +1M -exec echo "{}" >>/tmp/etc.largefiles  \;
find /etc -size +1M >> /tmp/etc.largefiles
6、查找/etc目录下所有用户都没有写权限的文件,显示出其详细信息:
find /etc -not -perm /222 -ls
0 0
原创粉丝点击