find命令

find 命令用来查找文件。find 默认在当前目录下查找,当匹配到符合条件的文件,会执行操作,默认的操作是 -print, 即打印文件。

按文件名查找

find 目录 -name '匹配项'

find 在给出的目录下查找文件(夹)名符合匹配项的文件,匹配项可以是通配符,并不是正则表达式。-name 是大小写敏感的,若在匹配时不考虑大小写,可以使用 -iname 选项。

如,在当前目录下查找所有 txt 文件:

find . -iname '*.txt'

若要使用正则表达式,可以用 -regex 选项(regular expression的缩写),但要注意的是 -regex 匹配的不只是文件名,而是完整的路径。如果想要匹配文件名,则必须使用".*/文件名" ,其中 .*/ 匹配文件路径(即所有文件夹),在此路径后的表达式匹配的是文件名。

如,匹配所有以数字开头的 txt 文件:

find . -regex ".*/[0-9][^/]*\.txt"

按文件大小查找

find 命令中按文件大小查找的选项是 -size,格式是

find 目录 -size [+|-] 文件大小

+ 表示只列出大于给定大小的文件,- 表示只列出小于给定大小的文件,既没有+也没有-表示等于所给大小。

文件大小用 数字+单位 表示,数字必须是整数,单位大小写敏感,常有单位有5个:

单位 描述
c 字节
k 千字节,1024字节
M 兆字节,1024k字节
G 吉字节,1024M字节

在使用单位时,所有的文件都会按此单位计算,向上取整得到整数,不使用小数,因此 -zise 2k 筛选出所有大小在 1025 ~ 2048 字节的文件。

逻辑连接

find 支持逻辑与(and)、逻辑或(or)以及逻辑非操作。-a-and 表示逻辑与,-o-or 表示逻辑或,而逻辑非则是在选项前加 ! 表示。

如,要查找所有 jpg 文件和所有 png 文件,可以用逻辑或

find . -name "*.jpg" -or -name "*.png"

要查找所有大于 3M 的 jpg 文件,可以用逻辑与

find . \( -size +3M -and -name "*.jpg" \)	#可以用转义的小括号括起来

要查找所有带有后缀名的文件

find . ! -name ".*/[^\.]*$"

对结果执行操作

find 命令默认对筛选结果执行 -print 操作,即打印文件路径。也可以使用其他命令执行操作。

-delete 选项会把匹配到的文件都删除

如,查找并删除 C 的编译文件 .o

find . -name "*.o" -delete

-exec 选项执行其他命令,用 {} 表示当前匹配到的文件名,find 命令会把 {} 替换成相应的文件名。

如,把所有 .c 文件复制到 c_file/ 文件夹下

find . -name "*.c" -exec cp {} c_file/ \;	
#必须要有“\;”,它表示cp命令的结束,不转义则表示find的结束