linux

74 阅读6分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详情

find命令

在目录结构中搜索文件,并执行执行的操作

命令格式

find pathname -options [-print -exec -ok ...]

命令功能

用于在文件树种查找文件,并作出相应的处理 

命令参数

  • 可选参数

    • -amin<分钟>: 查找在指定时间曾被存取过的文件或目录,单位以分钟计算;
    • -anewer<参考文件或目录>: 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;
    • -atime<24小时数>: 查找在指定时间曾被存取过的文件或目录,单位以24小时计算;
    • -cmin<分钟>: 查找在指定时间之时被更改过的文件或目录;
    • -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
    • -ctime<24小时数>: 查找在指定时间之时被更改的文件或目录,单位以24小时计算;
    • -daystart: 从本日开始计算时间;
    • -depth: 从指定目录下最深层的子目录开始查找;
    • -expty: 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;
    • -exec<执行指令>: 假设find指令的回传值为True,就执行该指令;
    • -false: 将find指令的回传值皆设为False;
    • -fls<列表文件>: 此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;
    • -follow: 排除符号连接;
    • -fprint<列表文件>: 此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;
    • -fprint0<列表文件>: 此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;
    • -fprintf<列表文件><输出格式>: 此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;
    • -fstype<文件系统类型>: 只寻找该文件系统类型下的文件或目录;
    • -gid<群组识别码>: 查找符合指定之群组识别码的文件或目录;
    • -group<群组名称>: 查找符合指定之群组名称的文件或目录;
    • -help或——help: 在线帮助;
    • -ilname<范本样式>: 此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;
    • -iname<范本样式>: 此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;
    • -inum<inode编号>: 查找符合指定的inode编号的文件或目录;
    • -ipath<范本样式>: 此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;
    • -iregex<范本样式>: 此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;
    • -links<连接数目>: 查找符合指定的硬连接数目的文件或目录;
    • -iname<范本样式>: 指定字符串作为寻找符号连接的范本样式;
    • -ls: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;
    • -maxdepth<目录层级>: 设置最大目录层级;
    • -mindepth<目录层级>: 设置最小目录层级;
    • -mmin<分钟>: 查找在指定时间曾被更改过的文件或目录,单位以分钟计算;
    • -mount: 此参数的效果和指定“-xdev”相同;
    • -mtime<24小时数>: 查找在指定时间曾被更改过的文件或目录,单位以24小时计算;
    • -name<范本样式>: 指定字符串作为寻找文件或目录的范本样式;
    • -newer<参考文件或目录>: 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;
    • -nogroup: 找出不属于本地主机群组识别码的文件或目录;
    • -noleaf: 不去考虑目录至少需拥有两个硬连接存在;
    • -nouser: 找出不属于本地主机用户识别码的文件或目录;
    • -ok<执行指令>: 此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;
    • -path<范本样式>: 指定字符串作为寻找目录的范本样式;
    • -perm<权限数值>: 查找符合指定的权限数值的文件或目录;
    • -print: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出.格式为每列一个名称,每个名称前皆有“./”字符串;
    • -print0: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出.格式为全部的名称皆在同一行;
    • -printf<输出格式>: 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出.格式可以自行指定;
    • -prune: 不寻找字符串作为寻找文件或目录的范本样式;
    • -regex<范本样式>: 指定字符串作为寻找文件或目录的范本样式;
    • -size<文件大小>: 查找符合指定的文件大小的文件;
    • -true: 将find指令的回传值皆设为True;
    • -typ<文件类型>: 只寻找符合指定的文件类型的文件;
    • -uid<用户识别码>: 查找符合指定的用户识别码的文件或目录;
    • -used<日数>: 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;
    • -user<拥有者名称>: 查找符和指定的拥有者名称的文件或目录;
    • -version或——version: 显示版本信息;
    • -xdev: 将范围局限在先行的文件系统中;
    • -xtype<文件类型>: 此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查.
  • 命令实例

        列出当前目录及子目录下所有文件和文件夹
        find .
    
        在/home目录下查找以.txt结尾的文件名
        find /home -name "*.txt"
    
        在/home目录下查找以.txt结尾的文件名,忽略大小写
        find /home -iname "*.txt"
    
        匹配文件路径或者文件
        find /usr/ -path "*local*"
    
        基于正则表达式匹配文件路径
        find . -regex ".*\(\.txt\|\.pdf\)$"
    
        基于正则表达式匹配文件路径,忽略大小写
        find . -iregex ".*\(\.txt\|\.pdf\)$"
    
        找出/home下不是以.txt结尾的文件
        find /home ! -name "*.txt"
    
        根据文件类型进行搜索
        find . -type 类型参数
        类型参数列表: 
        f 普通文件
        l 符号连接
        d 目录
        c 字符设备
        b 块设备
        s 套接字
        p Fifo
    
        向下最大深度限制为3
        find . -maxdepth 3 -type f
    
        搜索出深度距离当前目录至少2个子目录的所有文件
        find . -mindepth 2 -type f
    
        find . -type f 时间戳
        时间戳列表
        访问时间(-atime/天,-amin/分钟): 用户最近一次访问时间.
        修改时间(-mtime/天,-mmin/分钟): 文件最后一次修改时间.
        变化时间(-ctime/天,-cmin/分钟): 文件数据元(例如权限等)最后一次修改时间.
    
        搜索最近七天内被访问过的所有文件
        find . -type f -atime -7
    
        搜索恰好在七天前被访问过的所有文件
        find . -type f -atime 7
        
        find . -type f -size 文件大小单元
        文件大小单元列表
        b —— 块(512字节)
        c —— 字节
        w —— 字(2字节)
        k —— 千字节
        M —— 兆字节
        G —— 吉字节
    
        搜索大于10KB的文件
        find . -type f -size +10k
    
    	删除当前目录下所有.txt文件
    	find . -type f -name "*.txt" -delete
    
    	当前目录下搜索出权限为777的文件
    	find . -type f -perm 777
    
    	找出当前目录下权限不是644的php文件
    	find . -type f -name "*.php" ! -perm 644
    
    	要列出所有长度为零的文件
    	find . -empty