您的位置:首页 > 运维架构 > Linux

Linux find 文件搜索命令

2018-12-27 18:30 260 查看

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个子目录的所有文件

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: