Linux find文件搜索命令
用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find .
将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。
基本语法
find path args
path:如果 path 是空字串则使用目前路径
args:如果 args 为空则使用 -print 为预设args
搜索通道(args说明)
-
根据文件类型(# find . -type 类型参数)
rgs 说明 -type d 目录(directory) -type c 字型装置文件(character) -type b 区块装置文件(block) -type p 管道(pipe) -type f 普通文件(file) -type l 符号链接(link) -type s 套接字(socket) # find . -type f
将目前目录的子目录中所有一般文件列出 ,find后面的“.”号表示在当前文件夹进行搜索
# find . -type d
列出当前目录的子目录 -
根据时间戳(# find . -type f 时间戳)
UNIX/Linux文件系统每个文件都有三种时间戳
访问时间 access(-atime/天,-amin/分钟):用户最近一次访问时间。
修改时间 modify(-mtime/天,-mmin/分钟):文件最后一次修改时间。
变化时间 change(-ctime/天,-cmin/分钟):文件数据元
(例如权限等)最后一次修改时间。find . -type f -atime -7
搜索最近七天内被访问过的所有文件
find . -type f -atime 7
搜索恰好在七天前被访问过的所有文件
find . -type f -atime +7
搜索七天以上被访问过的所有文件
find . -type f -amin +10
搜索访问时间超过10分钟的所有文件
find . -ctime -7
查找目录及其子目录下所有最近 7天内更新过的文件
find /usr/bin -type f -mtime -7
查找/usr/bin目录中更改时间在7日以内的普通文件
find . -type f -anewer file.log
找出比file.log更晚被读取过的文件
find . -type f -cnewer file.log
找出比file.log更新的文件 -
根据文件大小(# find . -type f -size 文件大小)
args 说明 -size b 块(block)(512字节) -size c 字节(character) -size w 字(word)(2字节) -size k 千字节(kilobyte) -size M 兆字节(megabyte) -size G 吉字节/千兆字节(gigabyte) find . -type f -size +10k
搜索大于10KB的文件
find . -type f -size -10k
搜索小于10KB的文件
find . -type f -size 10k
搜索等于10KB的文件
find . -type f -size +10M
搜索大于10M的文件 -
根据文件的名称字符串长度或正则表达式(-name)
find . -empty
查找当前文件夹中长度为0的文件(空文件)
find . -name "????"
查找长度为4的文件,包括文件夹一并显示出来
find . -type f -name "???.txt"
查找所有名称为3个长度,并以 .txt 结尾的一般文件,不包括文件夹
find . -type d -name "??"
查找所有名称为2个长度的文件夹目录,不包括一般文件
find . -name name/-iname name
文件名称符合 name 的文件,包括文件夹(iname 会忽略大小写)
find /home -name "*.txt"
在/home目录下查找以.txt结尾的文件名
find /home -iname(ignore name) "*.txt"
同上,但忽略大小写
find /etc -type f -name init
查找 etc 路径下的名为 init 一般文件
find /etc -name *init
查找etc路径下所有以 init 结尾的文件和文件夹(* 表示从结尾倒数开始匹配,包含指定字符的内容,*init表示从结尾开始匹配,包含init的,也即以 init 结尾的文件)
find /etc -name ??ev
查找 etc 路径下,长度为4,并且包含ev的文件
find . -name "*.txt"
查找当前目录及其子目录下所有扩展名是 .txt 的文件(引号表示匹配字符串)
find . -regex ".*\(.txt\|.pdf\)$"
查找当前目录中以 .txt 或 .pdf 结尾的文件引号里面的第一个 " . " 号是查找的文件结尾.txt或.pdf的前面的任何字符的代替符号|,引号中的括号、逻辑符号等特殊字符需要 " \ " 转义,正则表达式以 $ 结尾。[ -regex(regular expression)<范本样式>:指定字符串作为寻找文件或目录的范本样式 ]
find . -iregex ".*\(.txt\|.pdf\)$"
同上,iregex 忽略大小写
find . -name "*.txt" -o -name ".pdf"
当前目录及子目录下所有以.txt和.pdf结尾的文件
find . \( -name "*.txt" -o -name ".pdf" \)
同上
find . -type f ! -name "*.txt"
找出当前目录及其子目录下不是以.txt结尾的文件,注意 " ! " 和 -name 之间要有空格如果多个表达式需要匹配时使用 ( ) 将运算式分隔,并使用下列运算:
并:语法①exp1 -and exp2
,语法②exp1, exp2
;
非:语法①! expr
, 语法②-not expr
;
或:语法 exp1 -or exp2
实现删除
find . -type f -name "*txt" -delete
删除当前目录下所有.txt文件,在最后直接加上 -delete
# find . -type f -mtime -7 -ok rm {} \;
查找当前目录及其子目录中更改时间在 7日以内的一般文件,并在删除之前询问。在最后直接加上-ok rm {} \;
相互之间有空格 -
根据用户组
find . -type f -group a5
查找当下目录及子目录中用户组名为a5
的文件 -
根据路径path
[root@localhost home]# find . -path ./a7
查找 /home目录及子目录下,路径名为./a7
的文件
[root@localhost home]# find . -ipath ./a7
同上,ipath 会忽略大小写,i是ignore忽略的首字母 -
根据目录深度
find . -maxdepth 3 -type f
查找当前目录中向下最大深度限制为3的文件
find . -mindepth 2 -type f
搜索出深度距离当前目录至少2个子目录的所有文件