欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

文件查找

程序员文章站 2022-04-27 20:49:43
[toc] 文件查找 find命令的基本语法 命令+路径+选项+表达式+动作 find查找分类 1.以名字查找文件 2.文件类型查找 文件类型 ​ d:目录(directory) ​ f:文件(file) ​ c:字符设备 ​ b:块设备 ​ l:软链接文件 ​ s:套接字文件(socket) ​ ......

目录

文件查找

find命令的基本语法

命令+路径+选项+表达式+动作

find查找分类

1.以名字查找文件

-name
在/etc/下找到以.sh结尾的文件
[root@oldboyedu ~]# find /etc/ -name '*.sh'
[root@oldboyedu ~]# find /etc/ -name '*.sh' -ls

2.文件类型查找

文件类型

​ d:目录(directory)
​ f:文件(file)
​ c:字符设备
​ b:块设备
​ l:软链接文件
​ s:套接字文件(socket)
​ p:管道文件

-type
查找/etc/目录下所有带conf的文件
[root@oldboyedu ~]# find /etc/ -type f -name '*conf*'
    
查找当前系统中,所有的管道文件
[root@oldboyedu ~]# find / -type p
/run/systemd/inhibit/1.ref
/run/systemd/sessions/1.ref
/run/systemd/initctl/fifo
[root@oldboyedu ~]# find / -type p -ls
39101    0 prw-------   1 root     root            0 jul  4 17:18 /run/systemd/inhibit/1.ref
41084    0 prw-------   1 root     root            0 jul  4 17:18 /run/systemd/sessions/1.ref
21199    0 prw-------   1 root     root            0 jul  4 17:18 /run/systemd/initctl/fifo

3.根据文件大小查找

-size
-a:多个条件同时满足
-o:或者,多个条件有一个满足即可
!:去反
+ :大于
- :小于
  :等于

    查找/目录下大于1g的所有文件
    [root@oldboyedu ~]# find / -size +1g
    查找一个脚本,名字带con
    [root@oldboyedu ~]# find / -name '*.sh' -name '*con*'
    查找一个脚本,名字不带con
    [root@oldboyedu ~]# find / -name '*.sh' ! -name '*con*'

4.根据时间查找文件

-mtime:
        +n:寻找n天之前(当天的不算)
        -n:查找n天内的文件(当天的文件算在内)
         n:查找第n的文件(当天的不算)
//创建测试文件
[root@zls ~]# for i in `seq -w 30`;do date -s  201802$i && touch file-$i;done

//查找7天以前的文件(不会打印当天的文件)
[root@zls ~]# find ./ -iname "file-*" -mtime +7

//查找最近7天的文件,不建议使用(会打印当天的文件)
[root@zls ~]# find ./ -iname "file-*" -mtime -7

//查找第7天文件(不会打印当天的文件)
[root@zls ~]# find ./ -iname "file-*" -mtime 7

//本地文件保留最近7天的备份文件, 备份服务器保留3个月的备份文件
find /backup/ -iname "*.bak" -mtime +7 -delete
find /backup/ -iname "*.bak" -mtime +90 -delete

5.根据用户来查找文件

    -user:指定文件属主用户
    -group:指定文件属组
    -nouser:查找没有属主的文件
    -nogroup:查找没有属组的文件
    
    [root@oldboyedu ~]# find /home/ -user zls -a -group 
    [root@oldboyedu ~]# find /home/ -user zls -group root
    [root@oldboyedu ~]# touch /home/123.txt
    [root@oldboyedu ~]# chown zls.root /home/123.txt 
    [root@oldboyedu ~]# find /home/ -user zls -group root
    //查找没有属主
    [root@zls ~]# find /home -nouser
    //查找没有属组
    [root@zls ~]# find /home -nogroup

    [root@oldboyedu ~]# find /home -nogroup -nouser

注意:$() 和 `` :将引起 来的部分当成一个命令执行。

6.根据权限查找

-perm
    644 :精确查找
    -644:模糊查找

find处理动作

动作 含义
-print 打印查找到的内容(默认)
ls 以长格式显示的方式打印查找到的内容
-delete 删除查找到的文件(仅能删除空目录
-ok 后面跟自定义shell命令(会提示是否操作
-exec 后面跟自定义shell命令(标准写法-exec ;)
//打印查询到的文件
[root@zls ~]# find /etc -name "ifcfg*"
[root@zls ~]# find /etc -name "ifcfg*" -print
[root@zls ~]# find /etc -name "ifcfg*" -ls

//拷贝文件
[root@zls ~]# find /etc -name "ifcfg*" -exec cp -rvf {} /tmp \;

//-ok会不断提示
[root@zls ~]# find /etc -name "ifcfg*" -ok cp -rvf {} /tmp \;

//删除文件
[root@zls ~]# find /etc -name "ifcfg*" -exec rm -f {} \;
[root@zls ~]# find /etc -name "ifcfg*" -delete

find结合xargs

#xargs将查找到结果一个一个的处理
[root@zls ~]# touch file.txt
[root@zls ~]# find . -name "file.txt" |xargs rm -f
[root@zls ~]# find . -name "file.txt" |xargs -i {} cp -rvf {} /var/tmp