文件查找之find命令
1.语法格式
find [路径] [选项] [操作]
2.查找选项及其含义
区分大小写
不区分大小写
-type 根据文件类型查找
f 文件
d 目录
c 字符设备文件
b 块设备文件
l 链接文件
p 管道文件
-perm 根据文件权限查找
属主查找
属组查找
属组的文件
属主的文件
天
-n n天以内修改的文件
+n n天以外修改的文件
n 正好n天修改的文件
分钟
-n n分钟以内修改的文件
+n n分钟以外修改的文件
-newer file1 查找更改时间比file1新的文件
-size 根据文件大小查找
-n 文件大小小于n的文件
+n 文件大小大于n的文件
n 文件大小等于n的文件
单位
c B(bytes)
k kB(1024 bytes)
M MB(1024 kB)
G GB(1024 MB)
-prune 用于将特定目录排除在搜索范围之外,通常和-path一起使用
-mindepth n 从n级子目录开始搜索,注:find命令没有指定搜索目录级别的话,会递归搜索
-maxdepth n 最多搜索到n-1级子目录,注:find命令没有指定搜索目录级别的话,会递归搜索
3.操作选项
-print 打印输出
{}
4.逻辑运算符
-a 与(默认)
-o 或
-not(!) 非
5.举例
实验环境
# 目录结构
test
|-- test1
| |-- 1.log
| |-- 1.xml
| |-- test11
| | |-- 11.log
| | `-- 11.xml
| |-- test12
| | |-- 12.log
| | `-- 12.xml
| `-- test13
| |-- 13.log
| `-- 13.xml
|-- test2
| |-- 2.log
| |-- 2.xml
| |-- test21
| | |-- 21.log
| | `-- 21.xml
| |-- test22
| | |-- 22.log
| | `-- 22.xml
| `-- test23
| |-- 23.log
| `-- 23.xml
|-- test3
| |-- 3.log
| |-- 3.xml
| |-- test31
| | |-- 31.log
| | `-- 31.xml
| |-- test32
| | |-- 32.log
| | `-- 32.xml
| `-- test33
| |-- 33.log
| `-- 33.xml
|-- test.log
|-- Test.log
|-- TEST.log
`-- test.xml
# 权限
drwxr-xr-x 5 test test 4096 Mar 8 13:36 test
drwxr-xr-x 5 test1 test1 4096 Mar 8 13:36 test1
drwxr-xr-x 5 test2 test2 4096 Mar 8 13:37 test2
drwxr-xr-x 5 test3 test3 4096 Mar 8 13:37 test3
-rw-r--r-- 1 test test 1024000 Mar 8 18:40 test.log
-rw-r--r-- 1 root root 0 Mar 9 12:13 Test.log
-rw-r--r-- 1 root root 0 Mar 9 12:13 TEST.log
-rw-r--r-- 1 test test 10240000 Mar 8 18:40 test.xml
查找选项
-name
# 在./test目录中查找以.log结尾的所有文件
[root@VM_0_13_centos ~]# find ./test -name "*.log"
./test/test.log
./test/test3/test32/32.log
./test/test3/test31/31.log
./test/test3/3.log
./test/test3/test33/33.log
./test/test1/test12/12.log
./test/test1/1.log
./test/test1/test13/13.log
./test/test1/test11/11.log
./test/test2/2.log
./test/test2/test22/22.log
./test/test2/test21/21.log
./test/test2/test23/23.log
-iname
# 在./test目录中查找文件名为test.log的文件,不区分大小写
[root@VM_0_13_centos ~]# find ./test -iname "test.log"
./test/test.log
./test/TEST.log
./test/Test.log
-type
# 在./test目录中查找类型为文件的文件
[root@VM_0_13_centos ~]# find ./test -type f
./test/test.log
./test/TEST.log
./test/Test.log
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1/test12/12.log
./test/test1/test12/12.xml
./test/test1/1.log
./test/test1/test13/13.xml
./test/test1/test13/13.log
./test/test1/1.xml
./test/test1/test11/11.log
./test/test1/test11/11.xml
./test/test.xml
./test/test2/2.log
./test/test2/2.xml
./test/test2/test22/22.xml
./test/test2/test22/22.log
./test/test2/test21/21.xml
./test/test2/test21/21.log
./test/test2/test23/23.log
./test/test2/test23/23.xml
# 在./test目录下查找类型为目录的文件
[root@VM_0_13_centos ~]# find ./test -type d
./test
./test/test3
./test/test3/test32
./test/test3/test31
./test/test3/test33
./test/test1
./test/test1/test12
./test/test1/test13
./test/test1/test11
./test/test2
./test/test2/test22
./test/test2/test21
./test/test2/test23
-perm
# 在./test下查找权限为644的文件
[root@VM_0_13_centos ~]# find ./test -perm 644
./test/test.log
./test/TEST.log
./test/Test.log
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1/test12/12.log
./test/test1/test12/12.xml
./test/test1/1.log
./test/test1/test13/13.xml
./test/test1/test13/13.log
./test/test1/1.xml
./test/test1/test11/11.log
./test/test1/test11/11.xml
./test/test.xml
./test/test2/2.log
./test/test2/2.xml
./test/test2/test22/22.xml
./test/test2/test22/22.log
./test/test2/test21/21.xml
./test/test2/test21/21.log
./test/test2/test23/23.log
./test/test2/test23/23.xml
# 在./test目录下查找权限为755的文件
[root@VM_0_13_centos ~]# find ./test -perm 755
./test
./test/test3
./test/test3/test32
./test/test3/test31
./test/test3/test33
./test/test1
./test/test1/test12
./test/test1/test13
./test/test1/test11
./test/test2
./test/test2/test22
./test/test2/test21
./test/test2/test23
-user
# 在./test目录下查找属主为test的文件
[root@VM_0_13_centos ~]# find ./test -user test
./test
./test/test.log
./test/test.xml
-group
# 在./test目录下查找属组为test的文件
[root@VM_0_13_centos ~]# find ./test -group test
./test
./test/test.log
./test/test.xml
-nouser -nogroup
# 在./test目录下查找无有效属组的文件
[root@VM_0_13_centos ~]# find ./test -nogroup
# 在./test目录下查找无有效属主的文件
[root@VM_0_13_centos ~]# find ./test -nouser
-mtime
# 在./test目录下查找修改时间为一天前的文件
[root@VM_0_13_centos ~]# find ./test -mtime +1
# 在./test目录下查找修改时间为一天内的文件
[root@VM_0_13_centos ~]# find ./test -mtime -1
./test
./test/test.log
./test/TEST.log
./test/Test.log
./test/test3
./test/test3/test32
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1
./test/test1/test12
./test/test1/test12/12.log
./test/test1/test12/12.xml
./test/test1/1.log
./test/test1/test13
./test/test1/test13/13.xml
./test/test1/test13/13.log
./test/test1/1.xml
./test/test1/test11
./test/test1/test11/11.log
./test/test1/test11/11.xml
./test/test.xml
./test/test2
./test/test2/2.log
./test/test2/2.xml
./test/test2/test22
./test/test2/test22/22.xml
./test/test2/test22/22.log
./test/test2/test21
./test/test2/test21/21.xml
./test/test2/test21/21.log
./test/test2/test23
./test/test2/test23/23.log
./test/test2/test23/23.xml
-newer
# 在./test查找比./test/test.log修改时间更新的文件
[root@VM_0_13_centos ~]# find ./test -newer ./test/test.log
./test
./test/TEST.log
./test/Test.log
./test/test.xml
-size
# 在./test目录下查找大小大于1kB的文件
[root@VM_0_13_centos ~]# find ./test -size +1k
./test
./test/test.log
./test/test3
./test/test3/test32
./test/test3/test31
./test/test3/test33
./test/test1
./test/test1/test12
./test/test1/test13
./test/test1/test11
./test/test.xml
./test/test2
./test/test2/test22
./test/test2/test21
./test/test2/test23
# 在./test目录下查找文件大小大于1MB的文件
[root@VM_0_13_centos ~]# find ./test -size +1M
./test/test.xml
[root@VM_0_13_centos ~]# find ./test -size -1M
./test/TEST.log
./test/Test.log
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1/test12/12.log
./test/test1/test12/12.xml
./test/test1/1.log
./test/test1/test13/13.xml
./test/test1/test13/13.log
./test/test1/1.xml
./test/test1/test11/11.log
./test/test1/test11/11.xml
./test/test2/2.log
./test/test2/2.xml
./test/test2/test22/22.xml
./test/test2/test22/22.log
./test/test2/test21/21.xml
./test/test2/test21/21.log
./test/test2/test23/23.log
./test/test2/test23/23.xml
[root@VM_0_13_centos ~]# find ./test -size -1k
./test/TEST.log
./test/Test.log
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1/test12/12.log
./test/test1/test12/12.xml
./test/test1/1.log
./test/test1/test13/13.xml
./test/test1/test13/13.log
./test/test1/1.xml
./test/test1/test11/11.log
./test/test1/test11/11.xml
./test/test2/2.log
./test/test2/2.xml
./test/test2/test22/22.xml
./test/test2/test22/22.log
./test/test2/test21/21.xml
./test/test2/test21/21.log
./test/test2/test23/23.log
./test/test2/test23/23.xml
-prune
# 在./test下查找所有普通文件,但是排除./test/test1和./test/test2目录
[root@VM_0_13_centos ~]# find ./test -path ./test/test1 -prune -o -path ./test/test2 -prune -o -type f
./test/test.log
./test/TEST.log
./test/Test.log
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1
./test/test.xml
./test/test2
# 在./test下查找所有属主为user的普通文件,但是排除./test/test1和./test/test2目录
[root@VM_0_13_centos ~]# find ./test -path ./test/test1 -prune -o -path ./test/test2 -prune -o -type f -a -user test
./test/test.log
./test/test1
./test/test.xml
./test/test2
-minpath -maxpath
# 在./test目录下从第二级目录开始到第三级目录结束,查找所有普通文件
[root@VM_0_13_centos ~]# find ./test -mindepth 2 -maxdepth 3 -type f
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1/test12/12.log
./test/test1/test12/12.xml
./test/test1/1.log
./test/test1/test13/13.xml
./test/test1/test13/13.log
./test/test1/1.xml
./test/test1/test11/11.log
./test/test1/test11/11.xml
./test/test2/2.log
./test/test2/2.xml
./test/test2/test22/22.xml
./test/test2/test22/22.log
./test/test2/test21/21.xml
./test/test2/test21/21.log
./test/test2/test23/23.log
./test/test2/test23/23.xml
# 查找./test目录中第三级目录中,所有普通文件
[root@VM_0_13_centos ~]# find ./test -mindepth 3 -maxdepth 3 -type f
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test1/test12/12.log
./test/test1/test12/12.xml
./test/test1/test13/13.xml
./test/test1/test13/13.log
./test/test1/test11/11.log
./test/test1/test11/11.xml
./test/test2/test22/22.xml
./test/test2/test22/22.log
./test/test2/test21/21.xml
./test/test2/test21/21.log
./test/test2/test23/23.log
./test/test2/test23/23.xml
操作选项
-exec
# 在./test目录下查找以.xml结尾的并且大小大于1M的普通文件
[root@VM_0_13_centos ~]# find ./test/ -type f -size +1M -name "*.xml"
./test/test.xml
# 在./test目录下查找以.xml结尾的并且大小大于1M的普通文件,并将其删除
[root@VM_0_13_centos ~]# find ./test/ -type f -size +1M -name "*.xml" -exec rm -fr {} \;
[root@VM_0_13_centos ~]# find ./test/ -type f -size +1M -name "*.xml"
# 生成一个10M大小的./test/test.xml空文件
[root@VM_0_13_centos ~]# dd if=/dev/zero of=./test/test.xml bs=1M count=10
10+0 records in
10+0 records out
10485760 bytes (10 MB) copied, 0.00952879 s, 1.1 GB/s
[root@VM_0_13_centos ~]# ll -h ./test/test.xml
-rw-r--r-- 1 root root 10M Mar 9 12:49 ./test/test.xml
# 在./test目录下查找以.xml结尾的并且大小大于1M的普通文件,并将其复制到/tmp目录
[root@VM_0_13_centos ~]# find ./test/ -type f -size +1M -name "*.xml"
./test/test.xml
[root@VM_0_13_centos ~]# find ./test/ -type f -size +1M -name "*.xml" -exec cp {} /tmp \;
[root@VM_0_13_centos ~]# ll /tmp/*.xml
-rw-r--r-- 1 root root 10485760 Mar 9 12:51 /tmp/test.xml
逻辑运算符
# 查找./test目录下属主不是test1和test2的所有普通文件
[root@VM_0_13_centos ~]# find ./test -type f ! -user test1 -! -user test2
./test/test.log
./test/TEST.log
./test/Test.log
./test/test3/test32/32.log
./test/test3/test32/32.xml
./test/test3/test31/31.log
./test/test3/test31/31.xml
./test/test3/3.log
./test/test3/test33/33.log
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test.xml
# 查找./test目录下属主为test或者以.xml结尾的普通文件
[root@VM_0_13_centos ~]# find ./test -type f -a \( -user test -o -name "*.xml" \)
./test/test.log
./test/test3/test32/32.xml
./test/test3/test31/31.xml
./test/test3/test33/33.xml
./test/test3/3.xml
./test/test1/test12/12.xml
./test/test1/test13/13.xml
./test/test1/1.xml
./test/test1/test11/11.xml
./test/test.xml
./test/test2/2.xml
./test/test2/test22/22.xml
./test/test2/test21/21.xml
./test/test2/test23/23.xml
# 目录结构