image.png
引言: Linux find命令用来在指定目录下查找文件。Linux下find命令在目录结构中搜索文件,并执行指定的操作。
find命令提供了相当多的查找条件,功能很强大。可以通过多个查找条件的方式,去精确的定位到某些匹配的资源。
如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。

  • 查找的类型: 名称 |大小| 修改时间|类型| 文件属主和属组 ……….

1.Find名称查找 -name -i 忽略大小写

  1. #1.创建文件
  2. touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}
  3. #2.查找/etc目录下包含ifcfg-eth0名称的文件
  4. [root@xuliangwei ~]# find /etc -name "ifcfg-eth1"
2.查找文件名中包含某字符(如"elm")的文件
find /home/lijiajia/ -name '*elm*'
find /home/lijiajia/ -name 'elm*'
find /home/lijiajia/ -name '*elm'
#3.-i **忽略大小写**
[root@xuliangwei ~]# find /etc -iname "ifcfg-eth1"

2.find大小查找 -size

[root@xuliangwei ~]# find /etc -size +5M
#2.查找等于5M的文件
[root@xuliangwei ~]# find /etc -size 5M
#3.查找小于5M的文件
[root@xuliangwei ~]# find /etc -size -5M

3.find类型查找 -type

f 文件 ( 相当于文件属性的普通文件 - ) [root@xuliangwei ~]# find /dev -type f d 目录 [root@xuliangwei ~]# find /dev -type d l 链接 [root@xuliangwei ~]# find /dev -type l [root@xuliangwei ~]# find /dev -type b #c 字符设备 [root@xuliangwei ~]# find /dev -type c #s 套接字 [root@xuliangwei ~]# find /dev -type s

*4.find时间查找 -mtime

image.png

  • n天以前
  • n天以后的

    1.创建测试文件(后期shell会讲)

    [root@xuliangwei ~]# for i in {01..10};do date -s 202002$i && touch file-$i;done

    2.查找7天以前的文件(不会打印当天的文件)=====( 保留了最近7天的数据)

    [root@xuliangwei ~]# find ./ -iname "file-*" -mtime +7

    3.查找最近7天的文件,不建议使用(会打印当天的文件)

    [root@xuliangwei ~]#find ./ -iname "file-*" -mtime -7

4.查找第7天文件(不会打印当天的文件)

[root@xuliangwei ~]#find ./ -iname "file-*" -mtime 7

5.本地文件保留最近7天的备份文件, 备份服务器保留3个月的备份文件(实际使用方案)

find /backup/ -iname “*.bak” -mtime +7 -delete

find /backup/ -iname “*.bak” -mtime +90 -delete

5.find用户查找

user  username
-group    groupname
[root@xuliangwei ~]# find /home -nouser  #查找没有属组
[root@xuliangwei ~]# find /home -nouser -o -nogroup 查找没有属主或属组

6.find查找后的动作命令示例

11. linux------find查找命令 - 图3


#1.使用-print打印查找到的文件
[root@xuliangwei ~]# find /etc -name "ifcfg*"
[root@xuliangwei ~]# find /etc -name "ifcfg*" -print (默认支持打印)

#2.使用-ls打印查找到的文件,以长格式显示
[root@xuliangwei ~]# find /etc -name "ifcfg*" -ls

#3.使用-delete删除文件,但仅能删除空目录
[root@xuliangwei ~]# find /etc -name "ifcfg*" -delete

#4.使用-ok实现文件拷贝,但会提示是否拷贝
[root@xuliangwei ~]# find /etc -name "ifcfg*" -ok cp -v {} /tmp \;

#5.使用-exec实现文件拷贝和文件删除不提示。
[root@xuliangwei ~]# find /etc -name "ifcfg*" -exec cp -v {} /tmp  \;
[root@xuliangwei ~]# find /etc -name "ifcfg*" -exec rm -f  {}  \;

exec 一个一个的删除 换行,一行一行执行 xargs 一次干掉 (效率不是一点半点的提高) 将所有的参数 整理为一行,一次执行 删除前一定要备份! 养成一个良好的习惯非常重要!! xargs的具体使用
问题:例如:想把 查询到的文件 都copy到/home/users/中去 find . -name “*” | xargs cp /home/users/ cp命令在这里就变成:cp /home/users/ Find_file 默认从管道传来的值是放在最后的 这样的话原本想做cp源文件的值和目的目录的参数就颠倒了 有办法解决一下吗?

cp:
[root@web01 ~]# find /root/ -type f -name "*.txt" |xargs -i cp {} /opt/ #默认传参到命令的最后边
find /data -type f -mtime -7 -name “*.log” -exec cp {} /tmp \;
[root@web01 ~]#

[root@web01 ~]#

[root@web01 ~]# ll /opt/

total 16

-rw-r—r— 1 root root 0 Sep 15 10:58 1.txt

-rw-r—r— 1 root root 142 Sep 15 10:58 2.txt

-rw-r—r— 1 root root 0 Sep 15 10:58 a.txt

-rw-r—r— 1 root root 30 Sep 15 10:58 b.txt

-rw-r—r— 1 root root 15 Sep 15 10:58 oldboy.txt

-rw-r—r— 1 root root 204 Sep 15 10:58 poet.txt

7 .通过件内容查找

(记得文件的内容但是不清楚文件名称是什么,也不知道路径在哪,怎么办?)
find 查找文件 通过 grep 筛选查找出来的文件内容

7.1 find /etc -type f | xargs grep “oldxu” —color=auto

xargs让一些不支持管道的命令可以使用管道技术
查找/etc目录下,所有类型是文件的,然后将查找到的结果作为grep筛选条件的参数

7.2 grep -r “oldboy” /etc/zabbix/

8.find逻辑运算符

符号 作用

-a 与 and
-o 或 or
! 非 -not
#1.查找当前目录下,属主不是root的所有文件
[root@xuliangwei ~]# find . -not -user root 
[root@xuliangwei ~]# find . ! -user root

#2.查找当前目录下,属主属于oldxu,并且大小大于1k的文件
[root@oldboy ~]# find /etc -type f -user oldxu -size +1k
[root@oldboy ~]# find /etc -type f -user oldxu -a -size +1k
[root@oldboy ~]# find /etc -type f -user oldxu -and -size +1k
#3.查找当前目录下的属主为root或者以xml结尾的普通文件
[root@oldboy ~]# find . -type f  \( -user root -o -name "*.xml" \)  -ls

exec {} \; 固定格式:代表前面find的结果:
1.png

查找第三方工具:locate

yum install   mlocate -y
updatedb                        #跟新目录信息
locate a.txt                    #使用搜索工具搜索