find命令用于在当前目录和当前目录的子目录下搜索文件。 此命令根据正则表达式、目录树深度、文件日期和文件类型等条件搜索文件。
一.根据文件名或正则表达式搜索文件
按名称搜索
用法1: find path -name 'filename '
用法2: find path -iname 'filename '
这两种用法都支持通配符。 其中,用法1区分大小写,用法2不区分大小写。 实例:在当前目录下查找以. sh结尾的文件。 命令如下:
find . -name '*.sh '
使用逻辑运算符在多个条件下进行搜索。 -a和-and为逻辑积,-o和-or为逻辑和。
实例:在当前目录下找到以. sh结尾且文件名包含test的文件。 命令如下:
find . -name '*.sh' -a -name '*test* '
使用正则表达式
-regex选项可以基于正则匹配文件,也可以不使用-iregex区分大小写。 实例:在当前目录下查找以. sh或. sample结尾的文件。 命令如下:
find . -regex '.*.(sh|sample) $ '
扩展名:如何查找文件名中不包含字符的文件
示例:要查找文件名中不包含test且以. sh结尾的文件,请运行以下命令:
find . -name '.sh' -a! -name 'test '
示例查找以. sh结尾的文件,而不是. git目录
find.- name '.git '-prune-o-name '.sh '
二.根据路径搜索
-path可以限制匹配文件的路径和名称。
示例:在test目录下查找以. sh结尾的文件
find . -name '*.sh' -path '*/test/* '
三.根据目录深度搜索
-maxdepth和-mindepth选项限制find命令遍历的目录的深度。
实例:仅查找在当前目录下以. sh结尾的文件。 命令如下:
find . -maxdepth 1 -name '*.sh '
四.根据文件类型进行检索
在UNIX类系统中,文件类型包括常规文件、目录、字符设备、符号链接和套接字等。 find命令按-type属性过滤文件类型。
示例:搜索当前目录下的所有目录,并命令如下,包括以下子目录:
find . -maxdepth 2 -type d
与-type选项支持的参数相对应的文件类型如下:
文件类型
参数值
普通文件
f
符号链接
LL
目录
d
字符设备
C
块设备
B
插座
s
国际先进先出
p
五.文件时间戳搜索
类unix系统上的每个文件都有三种类型的时间戳
访问时间(-atime、-amin ) :用户上次访问文件的时间。
修改时间(-mtime、-mmin ) :上次修改文件的时间。
元数据修改时间(-ctime、-cmin ) :上次修改文件权限、所有权等的时间。
以time结尾的选项为1天,以min结尾的选项为1分钟,这些选项的值都是正负整数。 例如,7表示7天前访问的文件,-7表示7天内访问的文件,7表示正好7天前访问的文件。
示例:
1、7分钟内修改的文件
find . -mtime -7
两七天前访问的文件
find . -atime 7
扩展:-newer选项允许您比较更改时间
示例:找到比修改test.sh文件的时间更近的文件
find . -type f -newer test.sh
六.按文件大小搜索
大于#2k的文件
查找类型f-size 2k
小于#2k的文件
查找类型f-size-2k
等于#2k的文件
查找类型f-size 2k
除了k以外,还支持以下单位
b :块(512字节)。
c :字节
w:字(2字节)
k:千字节(1024字节)。
M :兆字节(1024k ) )。
G:千兆字节(1024M米) )。
七、根据档案权限和所有权进行检索
#打印权限为644的文件
find -type f -perm 644
#打印用户www拥有的文件
查找类型f-user www
八、利用find检索结果执行相应命令
删除操作
-delete选项直接删除找到的文件
find . -name '*test2*' -delete
调用其他命令
-exec选项可以调用其他命令来对搜索结果执行相应的操作
将所有以. sh结尾的文件合并到all_shell.txt文件中
find.- typef-name ' *.sh '-exec cat { } all _ shell.txt ;
单击命令中的{},将其替换为找到的文件名。 命令结束;find命令的结尾,而不是cat命令的结尾,因此必须转义。