find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的作用不可小视,但是大多数人却无法最大程度发挥它的功效。现在我们来讨论find的大多数常见的用法。预
find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的作用不可小视,但是大多数人却无法最大程度发挥它的功效。现在我们来讨论find的大多数常见的用法。
预备知识:find命令工作方式如下:沿着文件层次结构向下遍历,去匹配符合条件的文件,执行相应的操作。**
find用法:**
用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ find . -print
解释:打印当前目录下所有文件和目录列表,-print可以忽略,find命令仍会打印出文件名。现在我们已经学会了find最常见的用法,下面来看一下find命令其它的参数。
一、-name 参数
根据文件名或正则表达式进行搜索
$ find /home/admin -name "*.txt" -print
解释:使用-name查找/home/admin目录下所有的.txt文件,并打印出来,find命令还有一个参数是-iname(忽略字母大小写),与name类似,只不过匹配时会忽略大小写。
二、匹配多个条件中的一个,可以采用OR条件操作
$ find . /( -name "*.txt" -o -name "*.log" /) -print
解释:上面代码会打印出所有.txt和.log文件,find命令能够匹配所有这两类文件。/( /)用于将-name ".txt" -o -name ".log" 视为一个整体。
_三、否定参数_
$ find ! -name "*.txt" -print
解释:上面的find命令能够匹配所有不以.txt结尾的文件名。
四、基于目录深度的搜索-maxdepth
$ find . -type f -maxdepth 1 -name "*.txt" -print
解释:以上命令,只在当前目录层级搜索所有.txt文件,并打印出来。find命令是沿着文件层次向下搜索,有些时候我们只需要在当前的目录进行搜索,无须再继续向下查找,对于这种情况,我们使用深度选项来限制find命令向下查找的深度。如果只允许find在当前目录中查找,深度可以设置为1,向下两级,深度可以设置为2,以此类推。
五、根据文件类型搜索
$ find . -type d -print
解释:列出所有的目录
$ find . -type f -print
解释:列出所有的文件
$ find . -type l -print
解释:列出所有符号链接
type参数匹配所需要的文件类型:
文件类型 类型参数普通文件 f符号链接 l目录 d字符设备 c块设备 b套接字 sFIFO p
六、根据文件时间进行搜索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分钟的所有文件
七、基于文件大小的搜索
根据文件的大小,可以这样搜索:
$ 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字节
八、删除匹配的文件
-delete可以用来删除find查找到的匹配文件。
$find . -type f -name "*.txt" -delete
解释:删除当前目录下所有.txt文件
九、根据权限查找
$ find . -type f -name "*.txt" -perm 644 -print
解释:查找当前目录下所有.txt文件并且文件权限为644的所有文件
十、根据用户查找文件
$ find . -type f -user admin -print
解释:打印出用户admin拥有的所有文件
十一、-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
...等。
十二、find跳过特定的目录
$ find . /( -name ".git" -prune /) -o /( -type f -print /)
解释:以上命令打印出不包括在.git目录中的所有文件名称
( -name ".git" -prune )的作用用于进行排除,它指明了.git目录应该排除在外,而( -type f -print )指明了需要执行的动作。