find

1、语法格式

find  路径  -参数  动作
      参数:最核心的,参数众多
其option常用参数详解如下:
-name   filename                        #查找名为filename的文件;
-type    b/d/c/p/l/f                    #查是块设备、目录、字符设备、管道、符号链接、普通文件;
-size      n[c]                      #查长度为n块[或n字节]的文件;
-perm                                   #按执行权限来查找;
-user    username                       #按文件属主来查找;
-group   groupname                   #按组来查找;
-mtime    -n +n                         #按文件更改时间来查找文件,-n指n天以内,+n指n天以前;
-atime    -n +n                              #按文件访问时间来查找文件;
-ctime    -n +n                        #按文件创建时间来查找文件;
-mmin     -n +n                            #按文件更改时间来查找文件,-n指n分钟以内,+n指n分钟以前;
-amin     -n +n                              #按文件访问时间来查找文件;
-cmin     -n +n                              #按文件创建时间来查找文件;
-maxdepth                                      #查找目录级别深度。

-name  名称

find . –name “jf*”

-type  类型

find .-name “jf*” –type f  #查找文件
find .-name “jf*” –type d  #查找目录

组合查找:

find .-name “jf*” –type f  -name jf1.txt  #只找jf1.txt
find .-name “jf*” –type f ! -name jf1.txt  #除了jf1.txt

-size 文件大小

      M: 以MB为单位
      K:以KB为单位
find . -name “*.tar.gz” -size +200M  #大于200M
find . -name “*.tar.gz” -size 200M  #等于200M
find . -name “*.tar.gz” -size -200M  #小于200M
find . -name “*.tar.gz” -size -200M -size +100M #100M-200M 之间
find . -name “*.tar.gz” -size -200M -size +100M  -type f #文件
find . -name “*.tar.gz” -size -200M -size +100M  -type d #目录

-perm  文件权限

find . –type f –perm 755  #目录权限755,

umask :默认是022

      目录默认是777:创建目录-umask 777-022 = 755
      文件默认是666:创建文件-umask  666-022 = 644

-user   根据属主查找

-group  根据属组查找

find . –user  nginx
find . –group  nginx

stat文件属性查看命令

-mtime    -n +n                         #按文件更改时间来查找文件,-n指n天以内,+n指n天以前;

查找30天前被修改过的文件:

find . –mtime  +30   #默认为d天数
改变文件时间:touch  文件名

示例:删除30天前的日志

查找log结尾,排除access.log,error.log,3天前修改过,大于20M
find . –name “*.log” ! –name access.log  ! –name error.log –mtime +3 –size +20M
如何删除以上结果:
测试
for i  in $( find . –name “*.log” ! –name access.log  ! –name error.log –mtime +3 –size +20M);do echo $i ; done
执行删除:
for i  in $( find . –name “*.log” ! –name access.log  ! –name error.log –mtime +3 –size +20M);do rm –rf $i ; done
其他方法:

-exec 命令  -参数  {} \;

      -exec :类似 | ,与find组合
      命令 –参数:rm  -rf ,参考各命令使用,如使用cp则为:
           -exec cp {}  /tmp/ \;   #{}表示要操作的文件
      {}    :表示find 的结果,里面不能写内容
      \;  :结束符
例:查找当前目录文件,然后复制到/tmp/1目录下
find . -type f -name "OpenIPMI*" -exec cp {}  /tmp/1/ \;
前面是查找结果,后面是操作动作。

示例2:网站发布目录被黑了,权限全是777,怎么恢复

要点:目录权限 755  文件权限 644 
目录:\.  排除.  \表示转义
find .-type d ! –anme \.  –exec  chmod 755 –R {} \;
文件
find .-type f ! –anme \.  –exec  chmod 644 –R {} \;
-maxdepth                                      #查找目录级别深度。
只查找当前目录的文件夹
find . –maxdepth 1 –type d ! –name \.
       –maxdepth 1  :要写在.号后面,1表示一层
排除隐藏目录
find . –maxdepth 1 –type d ! –name \. ! –name “.*”
需求升级:要求创建以find 查找出来的结果为目录名
find . –maxdepth 1 –type d ! –name \. ! –name “.*” –exec  mkdir –p /tmp/{} \;
xargs 使用方法
find  .  -name  “*.txt” -type d |xargs rm  -rf  
复制文件:
find  .  -name  “*.txt” -type f |xargs -I {}  cp {} /tmp/
       |xargs –I  {}  表示把find 的结果暂存在{} 里
 
总结:-exec  与 |xargs区别
       -exec 是一条一条执行
       |xargs 是把所有结果存到内存中,统一操作,生产环境文件过多不建议使用。
 
查找第一级目录,并以目录名在其他位置批量创建
find . -maxdepth 1 -type d ! -name \.  -exec mkdir -p /tmp/{} \;
 
 

从根目录开始查找所有扩展名为.log的文本文件,并找出包含”ERROR”的行

find / -type f -name "*.log" | xargs grep "ERROR"

例子:从当前目录开始查找所有扩展名为.in的文本文件,并找出包含”thermcontact”的行

find . -name "*.in" | xargs grep "thermcontact"

找到以dat结尾的文件并找到显示4500的行

find . -name "*.dat" | xargs grep "4500" | cut -f10 -d'|'

----把find 出来的文件 复制到指定目录下

find . -name 'blfs*' |xargs -i cp {} /home/xfj/blfstemp/
find . -name 'blfs_20170629_00_1092.dat' |xargs -i cp {} /home/xfj/filesTemp/
find . -name 'xfr_*' |xargs -i cp {} ../../downloadfile/

--删除当前目录下大小为0KB的文件

find . -name '*error*' | find . -name "*" -type f -size 0c | xargs -n 1 rm -f

 

#查找所有大于1G的文件

find / -size +1G

#查找jpg结尾的文件

find ~ -name '*jpg'

#查找后缀名为jpg的文件,且不区分大小写

find ~ -iname '*jpg'

#-o 或条件查找

find ~ ( -iname 'jpeg' -o -iname 'jpg' )

#-type f 指定查找的内容为文件,不含目录

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f

#-type d 只查找目录

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type d

#查找最近7天创建的文件

find ~ \( -iname '*jpeg' -o -iname '*jpg' \) -type f -mtime -7

#属主为bcotton的所有文件

find /data -owner bcotton

#按文件权限查找,查找所有只读文件

find ~ -perm -o=r

 

posted @ 2022-10-11 08:45  此生逍遥py  阅读(306)  评论(0)    收藏  举报