1.find命令

find命令通过指定查询的条件和索引,把相符的文件或目录列出来。


2.find命令的使用方法

语法:

find [路径] [选项] [索引]


2.1 根据文件名

  • 根据文件名查找文件,通配符需要用引号引起来。

查找 /tmp 目录下 wang开头的文件。

find /tmp  -name  "wang*"


2.2 根据文件类型

  • type:按文件类型查找。文件类型包括:b块设备。d目录。f一般文件。c字符文件。p管道文件。l链接文件。

查找 /tmp 目录下的普通文件

find /tmp -type f


2.3 根据时间

  • 与天数有关的参数包括 atime ctime mtime

  • 与分钟有关的参数包括 amin cmin min

atime (access time)访问时间 读取执行时更改。

ctime(change time)属性权限更改时间

mtime(modify time)内容更改时间 写入文件时更改。

以mtime为例。


  • -mtime n:意思就是在n天之内。

查找24小时内的文件

find /tmp -mtime 0


  • -mtime -n:意思就是在n天之内,含n天 

找到三天和三天内的日志文件

find /var/log -mtime -3


  • -mtime +n:意思就是在n天之前,不含n天

删除30天以前的日志文件。 

find /var/log -mtime +30 |xargs rm


  • -newer file:file为一个文件,列出比file新的文件

列出tmp目录下,创建修改file1之后的文件。

find /tmp -newer file1


2.3.1 数字和时间的关系

+4代表大于等于5天前的文件, 

-4代表小于等于4天前的文件, 

4代表4~5之间的文件。


find命令_第1张图片


2.4 根据用户和用户组

根据用户和用户组的权限查找

  • -uid n:n为用户的uid

在tmp目录下找出所有uid为500的文件。

find /tmp -uid 500


  • -username name :name为用户名

 找出tmp目录下所有用户wang的文件。

find /tmp -username wang


  • -gid n:n为用户的gid

同上


  • -nouser :寻找文件的所有者不存在的文件

  • -nogroup: 寻找文件所属组不存在的文件

找到不正常的文件

find / -nouser


2.5 根据文件权限和大小

  • -size [+-] xx:查找比xx要大(+)或小(-)的文件。(c代表byte,k代表1024bytes)

查找tmp目录下比file文件大的文件。 

find /tmp -size +file


  • 在 /tmp文件夹下, 查找一个文件大小小于10K的文件。

find /tmp -size -10K


  • -perm mode:查找文件权限刚好等于mode的文件,

文件权限为-rwsrwsret的文件 

find   / -perm  7777  -type  f


  • -perm -mode:查找文件权限最少包括mode的文件,

 查找rwxr--r--的文件,结果resr-xr-x的文件会被列出来。搜索的是0744 结果是4755

find   /   -perm   -0744


  • -perm +mode:查找文件权限包含任mode的文件

包含s或t的都会被列出来。 

find -perm  +7000


2.6 根据inode号

  • -inum xxx:根据inode号查找inode号相同的文件。查找硬链接文件

查找出来1.txt的硬链接文件。

find  /root/  -inum 33610734



3.find命令的特殊操作

3.1 -exec

  • -exec command : command为其他命令,exec后面可接其他命令来处理查询的结果。

在/tmp目录下查找文件类型为一般文件,文件名包含t的,文件大小要求大于1k切小于3k的文件,并使用ls -l 来查看其权限 

find   /tmp   -type   f   -name   t*  -size  +1k   -size  -3k -exec ls -l {}\;


这个命令的意思:前面的条件搜到的文件。交给-exec 后面的命令处理。{}代表前面搜索的结果。;有特殊意义,所以需要转义。



[root@www ~]# find /var/log/ -type f -mtime +10 -exec cp {} {}.tmp \;

[root@www ~]# find /var/log/ -name *.tmp -exec rm {} \;

在/var/log/目录下10天之前的文件,拷贝为文件名.tmp 

在/var/log/目录下,查找文件后缀名为.tmp的文件。然后删除。



3.2 print

  • -print:将结果打印在屏幕上,这个操作是默认的。


3.3 xargx

把前面的结果作为参数,依次递交给后面的命令处理。

xargs命令详解-未连接

 

[root@www ~]# find /var/log/ -mtime +10 -type f |xargs -i cp {} {}.1

[root@www ~]# ls /var/log/*.1

   /var/log/anaconda.ifcfg.log.1    /var/log/anaconda.yum.log.1  

[root@www ~]#  ls /var/log/*.1 |xargs  rm -rf

[root@www ~]# ls /var/log/*.1

   ls: 无法访问/var/log/*.1: 没有那个文件或目录


删除的时候不用-i选项。