find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的做用不可小视,可是大多数人却没法最大程度发挥它的功效。如今咱们来讨论find的大多数常见的用法。git
预备知识: find命令工做方式以下:沿着文件层次结构向下遍历,去匹配符合条件的文件,执行相应的操做。 **正则表达式
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ find . -print
解释:打印当前目录下全部文件和目录列表,-print能够忽略,find命令仍会打印出文件名。 如今咱们已经学会了find最多见的用法,下面来看一下find命令其它的参数。shell
根据文件名或正则表达式进行搜索express
$ find /home/admin -name "*.txt" -print
解释:使用-name查找/home/admin目录下全部的.txt文件,并打印出来,find命令还有一个参数是-iname(忽略字母大小写),与name相似,只不过匹配时会忽略大小写。工具
2、匹配多个条件中的一个,能够采用OR条件操做命令行
$ find . \( -name "*.txt" -o -name "*.log" \) -print
解释:上面代码会打印出全部.txt和.log文件,find命令可以匹配全部这两类文件。 \( \)用于将-name ".txt" -o -name ".log" 视为一个总体。code
_ 3、否认参数_it
$ find ! -name "*.txt" -print
解释:上面的find命令可以匹配全部不以.txt结尾的文件名。io
4、基于目录深度的搜索-maxdepthtest
$ find . -type f -maxdepth 1 -name "*.txt" -print
解释:以上命令,只在当前目录层级搜索全部.txt文件,并打印出来。find命令是沿着文件层次向下搜索,有些时候咱们只须要在当前的目录进行搜索,无须再继续向下查找,对于这种状况,咱们使用深度选项来限制find命令向下查找的深度。若是只容许find在当前目录中查找,深度能够设置为1,向下两级,深度能够设置为2,以此类推。
5、根据文件类型搜索
$ find . -type d -print
解释:列出全部的目录
$ find . -type f -print
解释:列出全部的文件
$ find . -type l -print
解释:列出全部符号连接
type参数匹配所须要的文件类型:
文件类型 类型参数 普通文件 f 符号连接 l 目录 d 字符设备 c 块设备 b 套接字 s FIFO p
6、根据文件时间进行搜索 Unix/Linux 文件系统中的每个文件都有三种时间戳:
访问时间(-atime):用户最近一次访问文件的时间
修改时间(-mtime):文件内容最后一次被修改的时间
变化时间(-ctime):最后一个修改权限的时间
在三个参数可做为find的时间选项,用整数指定,单位是天,一般带有-或+:
-表示小于,+表示大于
$find . -type -atime -7 -print
解释:打印最近7天内被访问过的全部文件
$find . -type -atime 7 -print
解释:打印刚好在7天前被访问过的全部文件
$find . -type -atime +7 -print
解释:打印出访问时间超过7天的全部文件
-atime -ctime -mtime单位都是基于天,还有一些其它参数是基于分钟做文计算单位:
-amin (访问时间)
-mmin(修改时间)
-ctime (变化时间)
$ find . -type -amin +7 -print
解释:打印出访问时间超过7分钟的全部文件
7、基于文件大小的搜索
根据文件的大小,能够这样搜索:
$ find . -type f -size +2M
解释:大于2M的文件
$ find . -type -size -2M
解释:小于2M的文件
$find . -type -size 2M
解释:等于2M的文件
find指定文件大小的参数有: b--块(512字节)
c--字节
w--字(2字节)
k--1024字节
M--1024K字节
G--1024M字节
8、删除匹配的文件
-delete能够用来删除find查找到的匹配文件。
$find . -type f -name "*.txt" -delete
解释:删除当前目录下全部.txt文件
9、根据权限查找
$ find . -type f -name "*.txt" -perm 644 -print
解释:查找当前目录下全部.txt文件而且文件权限为644的全部文件
10、根据用户查找文件
$ find . -type f -user admin -print
解释:打印出用户admin拥有的全部文件
11、-exec参数
find命令能够借助选项-exec与其它命令进行结合。-exec算得上是find最强大的特性之一。
# find . -type f -user root -name '*.txt' -exec chown admin {} \;
解释:用-user找出root拥有的.txt文件,而后用-exec更改全部权为admin,它会被分析为:chown admin filename.txt。
-exec以后能够接任何命令。{}表示一个匹配。对于任何匹配的文件名,{}均会被该文件名所替换
$ find . -type f -mtime +10 -name "*.txt" -exec cp {} OLD \;
解释:将10天前的.txt文件复制到OLD目录中
$ find . -type f -name "*.txt" -exec printf "Test file : %s\n {} \";
解释:查找到的.txt文件被{}所替换,-exec后跟的命令为printf,因此执行结果应该为:
Test file: test1.txt
Test file: test2.txt
...等。
12、find跳过特定的目录
$ find . \( -name ".git" -prune \) -o \( -type f -print \)
解释:以上命令打印出不包括在.git目录中的全部文件名称
( -name ".git" -prune )的做用用于进行排除,它指明了.git目录应该排除在外,而( -type f -print )指明了须要执行的动做。