文件查找之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

 

 

                  

          

# 目录结构