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的结束