• Linux Find 备忘清单


    在这里插入图片描述

    引言

    这是 Linux find 命令备忘清单的快速参考列表,包含常用选项和示例。

    一、入门

    1.1 简介

      在 Linux 系统中,搜索工作一般都是通过find命令来完成的,它可以使用不同的文件特性作为寻找条件(如文件名、大小、修改时间、权限等信息),一旦匹配成功则默认将信息显示到屏幕上。find在工作时会遍历指定的目录,通过匹配指定的条件搜寻我们需要的文件或者目录。因此,find命令具有以下特点:

    • 查找速度略慢
    • 精确查找
    • 实时查找
    • 可能只搜索用户具备读取和执行权限的目录

    1.2 命令用法

    find 命令用于按照指定条件来查找文件所对应的位置,语法格式如下所示:

    find [path...] [options] [expression]
    
    • 1
    参数描述
    path…需要查找文件所指定的路径。如果不指定,则默认为当前目录及其子目录
    options
    expression匹配条件/表达式。如果未设置匹配条件,则默认查找指定目录及子目录下所有文件

    find命令的参数以及作用如下表所示。

    参数示例描述
    -typefind . -type d仅查找目录
    -namefind . -type f -name “*.txt”按名称查找文件
    -inamefind . -type f -iname “hello”按名称查找文件(不区分大小写)
    -sizefind . -size +1G查找大于 1G 的文件
    -userfind . -type d -user jack查找杰克的文件
    -regexfind /var -regex ‘.*/tmp/.[0-9].file’将正则表达式与查找一起使用
    -maxdepthfind . -maxdepth 1 -name “a.txt”在当前目录和子目录中
    -mindepthfind / -mindepth 3 -maxdepth 5 -name pass在子目录级别 2 和 4 之间
    -atimefind / -atime 50访问时间(上次文件打开)
    -mtimefind / -mtime 50修改时间(上次文件内容被修改)

    二、基本使用

    2.1 根据文件大小查找

    命令用法为

    find 搜索路径 [选项] 搜索内容
    
    • 1

      其中,选项是 -size [+|-]N,这里的“+”的意思是搜索比指定大小还要大的文件,“-”的意思是搜索比指定大小还要小的文件。N为文件大小,单位为c/k/M/G,如下所示:

    命令说明
    -size b默认单位,如果单位为b或不写单位,则按照512 Byte搜索
    -size c搜索单位是c,按照字节搜索。
    -size w搜索单位是w,按照双字节(中文)搜索。
    -size k按照KB单位搜索,必须是小写的k。
    -size M按照MB单位搜索,必须是大写的M
    -size G按照GB单位搜索,必须是大写的G

    示例如下所示:

    # 在当前目录下搜索文件大小为28k的文件
    find . -size 28k
    
    # 查找所有大于 10MB 的文件
    find / -size +10M
    
    # 查找所有小于 10MB 的文件
    find / -size -10M
    
    # 查找所有正好为 10M 的文件
    find / -size 10M
    
    # 查找 100MB 和 1GB 之间的大小
    find / -size +100M -size -1G
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    2.2 根据文件类型查找

      Linux系统中的文件大致分为以下种:普通文件、目录文件、二进制程序文件、符号链接文件、套接字文件、块设备文件、字符设备文件。我们可以指定搜索文件的文件类型以达到查找文件的目的。命令用法为

    find 搜索路径 [选项] 搜索内容
    
    • 1

    所搜文件的具体类型有TYPE的值确定。TYPE的值及具体含义如下:

    命令说明
    -type f查找普通文件
    -type d查找目录文件
    -type l查找符号链接文件
    -type s查找套接字文件
    -type b查找块设备文件
    -type c查找字符设备文件
    -type p查找管道文件

    示例如下所示:

    # 使用名称查找目录
    find / -type d -name tecmint
    
    # 使用名称查找php文件
    find . -type f -name tecmint.php
    
    # 查找目录下的所有php文件
    find . -type f -name "*.php"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.3 根据文件名查找

    在下面的例子中,我们使用了-name选项查找f开头的文件,现在我们开始讲解如何根据文件名查找指定文件。

    find 搜索路径 [选项] 搜索内容
    
    • 1

    其中,选项参数如下表所示:

    参数说明
    -name按照文件名搜索
    -iname按照文件名搜索,不区分文件名大小写

    示例如下所示:

    # 在当前目录中使用名称查找文件
    find . -name tecmint.txt
    
    # 查找主目录下的文件
    find /home -name tecmint.txt
    
    # 使用名称查找文件并忽略大小写
    find /home -iname tecmint.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.4 指定搜索目录层级/深度

      指定搜索目录的层级需要用到选项-maxdepth和-mindepth,分别指定搜索目录的最大深度和最小深度。两个选项可以配合使用,指定搜索目录的深度范围。如果-maxdepth/-mindepth二者的参数相同,则find命令会搜索某个特定深度的文件。

    参数说明
    -maxdepth level指定最大搜索目录深度level,指定的目录为第1级
    -mindepth level指定最小搜索目录深度level。配合-maxdepth可搜索指定深度的文件。

    示例如下所示:

    # 该命令中”/”为第一级目录,查找文件的最大目录深度为2。
    find / -maxdepth 2 -name "*.conf"
    
    • 1
    • 2

    2.5 根据权限查找

    我们可以根据文件三类访问对象的三种三种权限查找对应文件,命令用法如下:

    find 搜索路径 [选项] 搜索内容
    
    • 1

    其中,选项参数如下表所示:

    参数描述
    -perm查找文件权限刚好等于“权限模式”的文件
    -perm -权限模式查找文件权限全部包含“权限模式”的文件
    -perm +权限模式查找文件权限包含“权限模式”的任意一个权限的文件

    示例如下所示:

    # 查找权限为 777 的文件
    find . -type f -perm 0777 -print
    
    # 查找未经许可的文件 777
    find / -type f ! -perm 777
    
    # 查找 SUID 集文件
    find / -perm /u=s
    
    # 查找 SGID 集文件
    find / -perm /g=s
    
    # 查找只读文件
    $ find / -perm /u=r
    
    # 查找可执行文件
    find / -perm /a=x
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2.6 根据属主/属组查找

    根据文件的属主以及属组信息,我们可以查找符合指定属主、属组的文件。相关选项用法如下:

    find 搜索路径 [选项] 搜索内容
    
    • 1

    其中,选项参数如下表所示:

    命令说明
    -user username查找属主为指定用户(UID)的文件
    -group groupname查找属组为指定组(GID)的文件
    -uid UseerID查找属主为指定的UID号的文件
    -gid GroupID查找属组为指定的GID号的文件
    -nouser查找没有属主的文件
    -nogroup查找没有属组的文件

    示例如下所示:

    # 根据用户查找单个文件
    find / -user root -name tecmint.txt
    
    # 根据用户查找所有文件
    find /home -user tecmint
    
    # 根据组查找所有文件
    find /home -group developer
    
    # 查找用户的特定文件
    find /home -user tecmint -iname "*.txt"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.7 多个文件名

    # 查找带有 .sh 或 .txt 扩展名的文件
    find . -type f \( -name "*.sh" -or -name "*.txt" \)
    
    • 1
    • 2

    2.8 多个目录

    # 查找具有多个目录的文件
    find /opt /usr /var -name foo.scala -type f
    
    • 1
    • 2

    2.9 根据时间戳查找

      文件的时间戳分为访问时间(access time)、修改时间(modify time)、创建时间(create time),分别简写为atime/mtime/ctime。我们可以根据这三个时间戳查找对应文件。命令用法如下:

    find 搜索路径 [选项] 搜索内容
    
    • 1

    其中,选项参数如下表所示:

    参数说明
    -atime [+|-]时间按照文件访问时间搜索
    -mtime [+|-]时间按照文件数据修改时间搜索
    -ctime [+|-]时间按照文件状态修改时间搜索

    提示:也有-amin、-mmin等时间选项,时间单位为分钟。

    命令说明
    -mtime +024 小时前修改
    -mtime 0从现在到 1 天前修改
    -mtime -1不到 1 天前修改(与 -mtime 0 相同)
    -mtime 124 至 48 小时前修改
    -mtime +1超过 48 小时前修改
    -mtime +1w上次修改时间超过 1 周前
    -atime 0从现在到 24 小时前最后一次访问
    -atime +0访问时间超过 24 小时
    -atime 1在 24 至 48 小时前访问
    -atime +1访问时间超过 48 小时
    -atime -1不到 24 小时前访问过(与 -atime 0 相同)

    示例如下所示:

    # 查找最近 50 天修改的文件
    find / -mtime 50
    
    # 查找最近 50 天访问的文件
    find / -atime 50
    
    # 查找最近 50-100 天修改的文件
    find / -mtime +50 –mtime -100
    
    # 查找最近 1 小时内更改的文件
    find / -cmin -60
    
    # 查找最近 1 小时内修改过的文件
    find / -mmin -60
    
    # 查找最近 1 小时内访问过的文件
    find / -amin -60
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    三、进阶使用

    有时候我们查找文件可能还会对这些文件进行后续的操作,例如删除,修改权限等。可以使用以下命令:

    命令说明
    -print默认的处理动作,显示至屏幕
    -ls类似于对查找到的文件执行“ls -l”命令
    -delete删除查找到的文件 慎用!
    -fls file查找到的所有文件的长格式信息保存至指定文件中,也可用重定向的方式
    -ok COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认
    -exec COMMAND {} \;对查找到的每个文件执行由COMMAND指定的命令,没有-ok中的交互式确认。
    其中{}用于引用查找到的文件名称自身,;是配合-ok和-exec选项的

    3.1 查找和删除

    # 查找并删除多个文件
    find . -type f -name "*.mp3" -exec rm -f {} \;
    
    # 查找和删除单个文件
    find . -type f -name "tecmint.txt" -exec rm -f {} \;
    
    # 查找和删除 100mb 文件
    find / -type f -size +100m -exec rm -f {} \;
    
    # 查找特定文件并删除
    find / -type f -name *.mp3 -size +10m -exec rm {} \;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3.2 查找和移动

    # 查找并将其移动到特定目录
    find . -name '*.mp3' -exec mv {} /tmp/music \;
    
    • 1
    • 2

    3.3 查找和复制

    # 查找并将其复制到特定目录
    find . -name '*2020*.xml' -exec cp -r "{}" /tmp/backup \;
    
    • 1
    • 2

    3.4 查找和排序

    find . -printf "%T+\t%p\n" | sort
    find . -printf "%T+\t%p\n" | sort -r
    
    • 1
    • 2

    3.5 查找和 chmod

    # 查找文件并将权限设置为 644
    find / -type f -perm 777 -print -exec chmod 644 {} \;
    
    # 查找目录并将权限设置为 755。
    find / -type d -perm 777 -print -exec chmod 755 {} \;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3.6 查找并排除目录

    # 查找当前目录及子目录中的所有js文件,但是排除掉node_modules目录中的
    find . -type f -name "*.js" -not -path "./node_modules/*"
    
    • 1
    • 2

    四、小结

      find命令通常进行的是从根目录开始的全盘搜索,搜索位置越大,消耗系统资源越多。对于服务器负载较高的情况,建议不要在高峰时期使用find命令的模糊搜索,会相对消耗较多的系统资源。在生产服务器上搜索的时候,尽量不在根目录下搜索,把搜索的范围尽量控制在最小。

  • 相关阅读:
    【C++入门】结构体
    安装Docker后的一些配置
    HTML表格学习
    49.HarmonyOS鸿蒙系统 App(ArkUI)Tab导航组件的使用
    thinkphp5实现ajax图片上传,压缩保存到服务器
    微软AI量化平台Qlib:你需要知道的核心知识点
    VSCode自定义闪烁光标
    跑通官方的yolov7-tiny实验记录(yolov7-tiny可作为yolov5s的对比实验网络)
    语义召回进阶之路:从传统到深度学习的搜索革新
    白鹭群优化算法(ESOA)附matlab代码
  • 原文地址:https://blog.csdn.net/duleilewuhen/article/details/133763137