Linux 经常使用命令--find

find 命令是Uxin/Linux命令行工具箱中最棒的工具之一。该命令对于编写shell脚本所起到的做用不可小视,可是大多数人却没法最大程度发挥它的功效。如今咱们来讨论find的大多数常见的用法。git

预备知识: find命令工做方式以下:沿着文件层次结构向下遍历,去匹配符合条件的文件,执行相应的操做。 **正则表达式

find用法:**

用法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]
$ find . -print

解释:打印当前目录下全部文件和目录列表,-print能够忽略,find命令仍会打印出文件名。 如今咱们已经学会了find最多见的用法,下面来看一下find命令其它的参数。shell

1、-name 参数

根据文件名或正则表达式进行搜索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 )指明了须要执行的动做。

相关文章
相关标签/搜索