Linux命令:find
find 是 Linux 中强大的搜索命令,不仅可以按照文件名搜索文件,还可以按照权限、大小、时间、inode 号等来搜索文件。但是 find 命令是直接在硬盘中进行搜索的,但如果指定的搜索范围过大,find命令就会消耗较大的系统资源,导致服务器压力过大,所以,在使用 find 命令搜索时,不要指定过大的搜索范围。
语法格式:
find 路径(查找范围) 查找数据条件(参数)
1、根据名称查找
[root@yu zy]# find /zy/ -name z1.txt
/zy/z1/z1.txt
/zy/z2/z1.txt
/zy/z3/z1.txt
/zy/z1.txt
2、根据文件类型
[root@yu zy]# find /zy/ -type f
/zy/z1/z1.txt
/zy/z1/z2.txt
/zy/z1/z3.txt
3、根据文件大小
[root@yu zy]# find /zy/ -size -5
/zy/
/zy/z1
/zy/z1/z1.txt
/zy/z1/z2.txt
/zy/z1/z3.txt
4、特殊查找数据方法:
-maxdepth: 查找数据层级最深深度
-mindepth: 查找数据层级最浅深度
[root@yu zy]# find /zy/ -maxdepth 1 -name "z1.txt"
/zy/z1.txt
5、 如何查找两个文件是否存在
[root@yu zy]# find /zy/ -name 'z1.txt' -o -name 'z2.txt'
/zy/z1/z1.txt
/zy/z1/z2.txt
6、在查找排除
[root@yu zy]# find /zy/ -name '*.txt' ! -name 'z2.txt'
/zy/z1/z1.txt
/zy/z1/z3.txt
[root@yu zy]# find /zy/ -name '*.txt' -not -name 'z2.txt'
/zy/z1/z1.txt
/zy/z1/z3.txt
7、查找多个条件是并且关系
[root@yu zy]# find /zy/ -name 'z1*' -a -name '*.txt'
/zy/z1/z1.txt
/zy/z2/z1.txt
/zy/z3/z1.txt
/zy/z1.txt
8、 排除指定目录不进行查找
[root@yu zy]# find /zy/ -path /zy/z2 -prune -o -name '*.txt' -print
/zy/z1/z1.txt
/zy/z1/z2.txt
/zy/z1/z3.txt
/zy/z3/z1.txt
/zy/z3/z2.txt
/zy/z3/z3.txt
9、如何将找出的数据进行复制
方法1、利用管道
[root@yu zy]# find /yu/ -name '*.txt'|xargs cp -t /zy/
[root@yu zy]# ls
z1 z1.txt z2 z2.txt z3 z3.txt
[root@yu zy]# mv z1.txt z2.txt z3.txt /yu/
[root@yu zy]# ls
z1 z2 z3
[root@yu yu]# find /yu/ -name '*.txt'|xargs -i cp {} /zy/
[root@yu yu]# cd /zy
[root@yu zy]# ls
z1 z1.txt z2 z2.txt z3 z3.txt
方法2、利用exec参数
[root@yu zy]# find /yu/ -name '*.txt' -exec cp {} /zy/ \;
[root@yu zy]# ls
z1 z1.txt z2 z2.txt z3 z3.txt
10、按时间条件查找
一天以前 / 之内:+1 / -1
等于一天:1
[root@yu zy]# find /yu/ -name '*.txt' -mtime -1
/yu/z1.txt
/yu/z2.txt
/yu/z3.txt
-mmin: 按照分钟查找数据信息
比较重要表达式
扩展操作