linux - find查找文件

99 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详

根据文件名查找

find 路径 -name 文件名 (-ls)
# 在一个目录下根据文件名查找文件,路径是绝对路径结果就是绝对路径,路径是相对路径,结果就是相对路径
# -ls 可以以列表方式展示查找到的文件,可以省略不写

find /root/ -name tasks* # 在/root目录下查找tasks开头的所有文件
find . name tasks*  # 在当前目录下查找tasks开头的所有文件 

按照文件大小进行查找

find 路径 -size +文件大小 (-ls)  # 在一个路径下查找大于某个文件大小的文件
find 路径 -size -文件大小  # 在一个路径下查找小于某个文件大小的文件
find 路径 -size 文件大小   # 在一个路径下查找等于某个文件大小的文件

find . -size +3M
find . -size -3M
find . -size 3M
# 文件大小单位请通过man find进行查找

按照查找目录深度进行查找

find 路径 -maxdepth n (-a) -name 文件名 (-ls)
# 从路径开始往下查找n层目录,-a表示and关系默认不写多个选项之间就是and关系,-o表示或者的关系

[root@VM-4-2-centos ~]# find / -name ifcfg-eth*
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@VM-4-2-centos ~]# find / -maxdepth 2 -name ifcfg-eth*
[root@VM-4-2-centos ~]# 

按照属主和属组进行查找

find 路径 -user 用户名 -group 组名 (-ls)
# 查找属主和属组的所有文件

find ./celery_demo/ -user root -group root
find ./celery_demo/ -user root -group root -name task*

按文件类型进行查找

find 路径 -type f(普通文件)/d(目录)/l(链接)/s(套接字文件)/c(字符设备)/p(管道文件) (-ls)

find / -type f -name 'test*'
find / -type d 

按文件权限进行查找

find 路径 -perm 权限 (-ls)  # 在路径下查找有权限的文件

find / -perm 644 
find / -perm 644 -name 'test*'

find结合xargs

并不是所有的命令都能够从管道符中获取数据,比如rm -rf命令,比如想要把find找到的文件进行删除,我们可以很自然的想到使用|然后进行删除,如下命令:

find . -name test.py | rm -rf

但是上述命令并不能执行,虽然不会提示错误,但是也不会进行删除操作,原因就是rm -rf命令不能从管道中获取数据,此时我们就可以借助xargsxargs可以接受管道中的数据然后再交给rm -rf进行处理。具体使用方式如下:

find . -name test.py | xargs -I {} rm -rf {} 
# xargs -I {} : 表示将管道中数据全部保存在{}中,此时{}就表示管道中的所有数据,再把{}交给rm -rf进行处理即可

find . -name a | xargs -I {} cp -r {} /media
# 将管道中的内容复制到/media路径下

xargs -I {}是通用的方法,任何不支持从管道中获取数据的命令都可以借助xargs

find命令删除文件

其实find命令自己也是支持删除文件的

find 目录 -name 文件 -ok rm -rf {} \;
- -ok有提示作用,如果不需要提示可以使用-exec
- {}表示找到的所有内容
- \;固定用法