• Linux 命令行——文件查找:locate、find


    文件查找

    本文摘录自 Linux 命令行

    1. 查找文件

    一个 Linux 系统中包含很多文件,我们要怎么准确地查找到自己想要的文件呢?

    1. locate:通过名字来查找文件,查找文件的简单方法。这个 locate 程序会执行一次快速的路径名数据库搜索,并且输出每个给定与字符串相匹配的路径名。locate mysql | grep local:会查找路径中含有 mysql 和 local 的路径。
    2. find:在一个目录层次结构中搜索文件,查找文件的复杂方式。locate 只能依据文件名来查找文件,而 find 程序能基于各种各样的属性 搜索一个给定的目录(以及它的子目录),来查找文件。find 有很多命令需要学习。最简单的使用方法,如查找主目录的路径名列表:find ~ | wc -l:因为数量很多,遂将输出列表管道到其他的程序中,wc 程序用来计算出文件的数量。find 可以通过应用选项,测试条件和操作来找到符合特定标准的文件。
      1. 测试条件:如我们想在我们的搜索中得到目录列表,可以添加如下测试条件:find ~ -type d | wc -l:-type d 限制了只搜索目录,相对的,我们也可以限制只搜索普通文件:find ~ -type f | wc -l,下面是 find 命令常见的文件类型测试条件:

        文件类型 type描述
        b块特殊设备文件
        c字符特殊设备文件
        d目录
        f普通文件
        l符号链接
      2. 我们也可以通过加入一些额外的测试条件,根据文件大小文件名来搜索,让我们查找所有文件名匹配通配符模式:“*.JPG”和大于1M的普通文件:find ~ -type f -name "*.JPG" -size +1M | wc -l:+号表示大于,-号小于,没有则精准匹配。

      3. 操作符:即使拥有了 find 提供的所有测试条件,我们也需要一个可以描述将多个条件组合起来的逻辑关系。如:我们需要确定是否一个目录中所有文件和子目录拥有安全权限,怎么办呢?我们可以查看权限不是 0600 和 0700 的目录。命令是这样的find /Users/chappyzhao/Downloads/pictures/Pics/ \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \):-perm 匹配权限已经设置为指定的文件或目录。

        1. find 命令没有那么难,从外层看,这个测试条件被分为两个部分,由一个 -or 操作符连接起来:( expression 1 ) -or ( expression 2 ),这看起来没问题,因为我们正在搜索具有不同权限集合的文件和目录。圆括号对于 shell 有特殊含义,所以加了 \ 来转译防止 shell 解释它们。
        2. 预定义的操作:执行 find 命令得到结果列表很有用,但是我们真正想要做的是对操作列表中的某些条目。幸运的是,find 命令允许基于搜索结果来执行操作。以下是一些预定义的操作:
        3. 操作描述
          -delete删除当前匹配的文件
          -ls对匹配的文件执行等同的 ls -dils 命令
          -print把匹配文件的全路径名输送到标准输出
          -quit一旦找到一个匹配,退出

        find /Users/chappyzhao/Downloads/pictures/Pics/ -type f -name '*.txt' -delete:此目录以及子目录找到以 .txt 结尾的普通文件并删除。删除命令都应该小心,每次都应当先用 -print 替代 - delete 确认后再删除。

    3. 用户定义的行为:除了预定义的操作外,我们也可以调用任意的命令,就像这样-exec command {} ;,command 就是一个命令的名字,{} 代表当前路径名,分号是必须的分隔符。比如之前的 -delete 命令就可以这样:-exec rm '{}' ';'
    4. 实操
    % mkdir -p Pics/dir-{00{1..9},0{10..99},100}
    # 在新创建的目录中创建文件
    % touch Pics/dir-{00{1..9},0{10..99},100}/file-{A..Z}
    # 找到所有 file-A 文件,将会显示 100 个但是是乱序
    % find  Pics -type f -name 'file-A'
    # 使用 wc -l 可以显示总数
    % find  Pics -type f -name 'file-A'wc -l
    # 新建
    % touch Pics/timestamp
    # 因为每次 touch 文件都会更新文件时间,所以在这里 touch 所有 B 文件来更改它的操作时间
    % find Pics -type f -name 'file-B' -exec touch '{}' ';'
    # 将所有 B 文件与 timestamp 文件比较,找出所有更新的文件
    % find Pics -type f -newer Pics/timestamp
    # 
    % find Pics \( -type f -not -perm 0600 \) -or \( -type d -not -perm 0700 \) | wc -l
    # 给不符合权限的文件和目录赋予新权限
    % find Pics \( -type f -not -perm 0600 -exec chmod 0600 '{}' ';' \)
                 -or \( -type d -not -perm 0711 -exec chmod 0700 '{}' ';' \)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    在前端html页面中向服务器发送post登录请求
    正则表达式校验版本号
    Blazor前后端框架Known-V1.2.16
    python7
    码蹄杯语言基础:选择结构(C语言)
    Intellij IEDA JAVA项目XML创建没有 spring config
    centos 7.9安装和配置分析型数据库clickhouse
    A-level成绩BBB能申英国哪些大学?
    Java — static修饰符
    计组 | 六七章 总线 IO输入输出系统 —— 总复习知识点回顾
  • 原文地址:https://blog.csdn.net/weixin_43621315/article/details/125463674