Linux find 文件搜索命令

Linux find文件搜索命令

用于在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则 find . 将在当前目录下查找子目录与文件,并且将查找到的子目录和文件全部进行显示。


基本语法

find path args
path:如果 path 是空字串则使用目前路径
args:如果 args 为空则使用 -print 为预设args


搜索通道(args说明)

  1. 根据文件类型(# 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列出当前目录的子目录

  2. 根据时间戳(# 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更新的文件

  3. 根据文件大小(# 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的文件

  4. 根据文件的名称字符串长度或正则表达式(-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 {} \;相互之间有空格

  5. 根据用户组
    find . -type f -group a5 查找当下目录及子目录中用户组名为a5的文件

  6. 根据路径path
    [root@localhost home]# find . -path ./a7 查找 /home目录及子目录下,路径名为 ./a7的文件
    [root@localhost home]# find . -ipath ./a7同上,ipath 会忽略大小写,i是ignore忽略的首字母

  7. 根据目录深度
    find . -maxdepth 3 -type f 查找当前目录中向下最大深度限制为3的文件
    find . -mindepth 2 -type f 搜索出深度距离当前目录至少2个子目录的所有文件

猜你喜欢

转载自blog.csdn.net/qq_43662261/article/details/85275164