首页 > 系统管理 > 基础知识 > Linux 文件查找之find命令
2015
02-22

Linux 文件查找之find命令

前言

在上一篇博文中我们详细介绍了Linux中文件查找的其他的几个命令,如果需要请查看Linux 文件查找,在这里我们将介绍一款更加强大的文件查找工具Find,开始我们的find的之旅吧!

 

一、find的基本语法格式:

find  [查找位置]  [查找标准]  [处理动作]

  1. 查找位置:默认为当前目录,可以指定多个目录,多个之间用空格

  2. 查找标准:默认为查找指定目录下的所有文件

  3. 处理动作:显示到标准输出,默认为print

 

二、Find演示示例

2.1、根据文件查找

-name  "文件名称" : 根据文件名查找,支持glob

1

 -iname "文件名称",根据文件名查找,不区分大小写

2

2.2、文件的属主、属组

-user     "USERNAME"    :    根据属主查找

-group    "GROUP"         :    根据属组查找

-uid      "UID"               :    根据UID查找

-gid      "GID"                  :    根据GID查找

-nouser                           :    查找没有属主的文件

-nogroup                         :   查找没有属组的文件

[root@Redhat6 /]# find / -nouser -nogroup  #没有属主,也没有属组
/tmp/user1dir
[root@Redhat6 /]# ls -ld /tmp/user1dir/  #验证查找的文件是否符合要求,文件没有用户表示属主和属组,但会以ID号来表示
drwxrwxr-x 2 500 500 4096 Jul 23 10:36 /tmp/user1dir/
[root@Redhat6 /]# find / -user root -gid 500  #查找用户为root,gid为500
/tmp/user1dir
[root@Redhat6 /]# ls -ld /tmp/user1dir/
drwxrwxr-x 2 root 500 4096 Jul 23 10:36 /tmp/user1dir/

2.3、文件的类型

-type

f   文件

d  目录

b  块设备

c  字符设备

l  符合链接文件

p  命令管道文件

s  套接字文件

[root@tshare365 tmp]# touch tshare365
[root@tshare365 tmp]# mkdir 123
[root@tshare365 tmp]# cd 
[root@tshare365 ~]# find /tmp/ -type d
/tmp/
/tmp/.ICE-unix
/tmp/123
[root@tshare365 ~]# find /tmp/ -type f
/tmp/tshare365
[root@tshare365 ~]#

2.4、文件的大小查找

-size

#[k|M|G]:#表示数字,匹配的时候为模糊匹配

+#[k|M|G]:+#表示大于,匹配的结果大于#

-#[k|M|G] :-#表示小于,匹配的结果是小于#

[root@tshare365 ~]# du -sh `find /root -size +20M`
24M	/root/tshare365/mysql-5.5.8.tar.gz
46M	/root/tshare365/mysql-5.5.8/sql/mysqld
69M	/root/tshare365/mysql-5.5.8/sql/libsql.a
25M	/root/tshare365/cmake-2.8.10/Source/libCMakeLib.a
[root@tshare365 ~]#

查找大于20M的文件

2.5、文件修改时间

-atime   [+|-]#   :访问时间,默认为天,#表示#天的这个时间点,+#表示至少有#天没访问,  -#表示#天之内没访问

-mtime [+|-]#   :  修改时间,#表示#天的这个时间点没有被修改,+#表示至少有#天没有修改 ,  -#表示#天之内没有修改

-ctime   [+|-]#   : 改变时间,#表示#天的这个时间点没有被改变,+#表示至少有#天没有被改变 ,  -#表示#天之内没有被改变

-amin    [+|-]#    : 时间为分钟,#表示#分钟的这个时间点没有被访问,+#表示至少有#分钟没有被访问 ,  -#表示#分钟之内没访问

-mmin  [+|-]#    :时间为分钟,#表示#分钟的这个时间点没有被修改,+#表示至少有#分钟没有被修改 ,  -#表示#分钟之内没有被修改

-cmin    [+|-]#    :时间为分钟,#表示#分钟的这个时间点没有被改变,+#表示至少有#分钟没有被改变 ,  -#表示#分钟之内没有被改变

3 4 5

2.6、文件权限

-perm  [+|-] MODE

不带[+|-]表示精确权限匹配,

+表示任何一类用户的任何一位权限匹配

- 表示每类用户的每位权限都匹配

5 6 7

find在查找标准时支持组合查找条件,在使用组合查找条件时要考虑优先级,优先级为顺序为非→与→或,在组合参数是想改变优先级可以用()来提升优先级。

-a    (and)   与默认是与

-o    (or)      或

-not,!           非

 

find的处理动作可以是:

-print   默认为输出

-ls          显示查找到的文件的详细信息

-ok   COMMAND \;   要确认

-exec {}\;  

1、查找/var目录下属主为root并且属组为mail的所有文件;
find /var -user root -group mail
2、查找/usr目录下不属于root,bin,或student的文件;
find /usr -not \( -user root -o -user bin -o -user student \)
find /usr -not -user root -a -not -user bin -a -not -user student
3、查找/etc目录下最近一周内内容修改过且不属于root及student用户的文件;
find /etc -mtime -7 -a -not -user root -a -not -user student
find /etc -mtime -7 -a -not \( -user root -o -user student \)
4、查找当前系统上没有属主或属组且最近1天内曾被访问过的文件,并将其属主属组均修改为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
7、删除类型不是目录,而且没有属主的文件;
find / -not -type d -a -nouser -exec rm -f {} \;
find / -not -type d -a -nouser | xargs -i rm -f {}

Find命令就到此结束了,如果有什么问题请留言!




最后编辑:
作者:tshare365
这个作者貌似有点懒,什么都没有留下。
捐 赠您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请狠狠点击

留下一个回复