Linux文件查找
Linux系统中的find命令在查找文件时非常有用而且方便。 它可以根据不同的条件来进行查找文件:例如权限、拥有者、修改日期/时间、文件大小等等。 同时find命令是Linux下必须掌握的。 find 命令的基本语法如下:
find [路径] [选项] [表达式] [动作]
find查找示例:
按文件类型查找:
# f 文件
[root@localhost ~]# find /dev -type f
#d目录
[root@localhost ~]# find /dev -type d
#l链接
[root@localhost ~]# find /dev -type l
#b块设备
[root@localhost ~]# find /dev -type d
#c字符设备
[root@localhost ~]# find /dev -type c
#s套接字
[root@localhost ~]# find /etc/ -type s
#管道文件
[root@localhost ~]# find /etc/ -type p
#查看找出文件的详细信息
root@localhost ~]# find /run -type s|xargs ls
按文件大小查找
1.查找大于5M的文件
[root@localhost ~]# find /etc/ -size +5M
2.查找等于5M的文件
[root@localhost ~]# find /etc/ -size 5M
3.查找小于5M的文件
[root@localhost ~]# find /etc/ -size -5M
练习:
# 1.在/opt下创建1000个文件
# 2.使用find找出(/opt下小于1k的文件)并删除
root@localhost ~]# find /opt/ -size -1k |xargs mv -t /tmp
#将创建/opt下的文件移动到/tmp下
[root@localhost ~]# find /opt/ -size -1k |xargs -i mv {}
xargs -i 指定数据流的位置,将数据流放入{}中
按文件名查找:
1.创建文件
[root@localhost ~]# touch /etc/sysconfig/network-scripts/{ifcfg-eth1,IFCFG-ETH1}
2.查找/etc目录下包含ifcfg-eth1名称的文件
[root@localhost network-scripts]# find /etc -name "ifcfg-eth1"
3.-i 忽略大小写
[root@localhost network-scripts]# find /etc -iname "ifcfg-eth1"
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/IFCFG-ETH1
4.查找/etc目录下包含ifcfg-eth名称所有文件
[root@localhost network-scripts]# find /etc/ -name "ifcfg-eth*"
/etc/sysconfig/network-scripts/ifcfg-eth1
[root@localhost network-scripts]# find /etc/ -iname "ifcfg-eth*"
/etc/sysconfig/network-scripts/ifcfg-eth1
/etc/sysconfig/network-scripts/IFCFG-ETH1
按文件时间查找:
# 一个文件有以下三种时间
access time:atime
modify time:mtime
change time:ctime
# 查看三种时间[root@localhost ~]# stat a.txt
1.创建测试文件
[root@localhost ~]# for i in {01..10};do date -s 201904$i && touch file-$i;done
2019年 04月 01日 星期一 00:00:00 CST
2019年 04月 02日 星期二 00:00:00 CST
2019年 04月 03日 星期三 00:00:00 CST
2019年 04月 04日 星期四 00:00:00 CST
2019年 04月 05日 星期五 00:00:00 CST
2019年 04月 06日 星期六 00:00:00 CST
2019年 04月 07日 星期日 00:00:00 CST
2019年 04月 08日 星期一 00:00:00 CST
2019年 04月 09日 星期二 00:00:00 CST
2019年 04月 10日 星期三 00:00:00 CST
2.查找7天以前的文件,不会打印当天的文件
[root@localhost ~]# find ./ -iname "file-*" -mtime +7
./file-01
./file-02
3.查找最近7天的文件,不建议使用,会打印当天的文件
[root@localhost ~]# find ./ -iname "file-*" -mtime -7
./file-04
./file-05
./file-06
./file-07
./file-08
./file-09
./file-10
4.查找第七天的文件,不会打印当天文件
[root@localhost ~]# find ./ -iname "file-*" -mtime 7
./file-03
5.查找/var/log下所有。log结尾的文件,并且保留最近7天的log文件``
[root@localhost ~]# find /var/log -type f -iname “*.log” -mtime +7 -delete(-type f 文件) (-iname 不区分大小写的.log文件)(-mtime7天以前的文件)(-delete删除)
按照文件用户和组查找:
1.查找属主LW
[root@localhost home]# find /home/ -user LW
[root@localhost home]# find /home/ -user LW
2.查找属主是LW,并且属组是root
[root@localhost home]# find /home/ -user LW -a -group root
3.查找属主是LW 或者属组是root
[root@localhost home]# find /home/ -user LW -o -group root
4.查找没有属组
[root@localhost home]# find /home/ -nogroup
5.查找没有属主或没有属组
[root@localhost home]# find /home/ -ngroup -o -nouser
按照文件权限查找
-perm
#精确,并输出详细信息
[root@localhost home]# find /root -type f -perm 644 -ls
#包含,并输出详细信息,每个权限位上,都要包含该数字权限的所有权限
[root@localhost ~]# find ./ -perm -622 -ls
622
rw--w--w-
# 总共三个权限位,只要有一个权限位的权限被包含,就可以找到[root@localhost ~]# find ./ -perm /644 -ls
属主权限位,有一个r或者有一个w就满足条件
属组权限位,有一个r就满足条件
其他用户权限位,有一个r就满足条件
#特殊权限,并输出详细信息
[root@localhost home]# find /root -type f -perm -4000 -ls
[root@localhost home]# find /root -type f -perm -2000 -ls
[root@localhost home]# find /root -type f -perm -1000 -ls
按照文件深度查找
-maxdepth
针对目录层级查找
# 查找/etc/目录下的所有1级和2级目录
[root@localhost ~]# find /etc -type d -maxdept
find动作处理
动作 | 含义 |
---|---|
打印查找到的内容(默认) | |
-ls | 查看文件的详细信息 |
-delete | 删除查找到的文件(仅仅删除空目录) |
-ok | 后面自定义shell命令()会提示是否操作 |
-exec | 后面跟随自定义shell命令(标准写法-exec ;) |
ps:
-ls:查看文件的详细信息 | xargs ls-l或者ls-l$(find xxx) 或者 ls-l`find xxx(bug,多条件组合时,只能看最后条件的详细信息)
-delete:删除查找到的文件(bug跟ls,ls看不见的,也删除不掉)并且只能删除空目录其他删除方法: |xargs rm-fr或者rm-fr$(find xxx)或者rm-frfind xxx
[root@localhost ~]# find / -name 'etc' -delete
find: cannot delete ‘/run/initramfs/state/etc’: Directory not empty
find: cannot delete ‘/etc’: Directory not empty
find: cannot delete ‘/var/tmp/etc’: Directory not emty
find逻辑运算符
符号 | 作用 |
---|---|
-a | 与 |
-o | 或 |
-not | 非(!) |
Comments | NOTHING