• 如何使用find命令在Linux中查找文件


    Linux Find命令是Linux系统管理员工具库中最强大的工具之一。

    Find是一个命令行实用程序,它允许您根据用户给定的表达式搜索目录层次结构中的文件和目录,并对每个匹配的文件应用用户指定的操作。

    您可以使用find命令根据文件权限,类型,日期,所有权,大小等搜索文件。它还可以与其他工具(如grep或sed)结合使用,以对这些文件执行操作。

    Linux查找命令语法

    在讨论如何使用find命令之前,让我们先回顾一下基本语法。

    find实用程序表达式采用以下形式:

    find [options] [path...] [expression]

    options属性控制符号链接,调试选项和优化方法的处理。
        path ...属性定义find将搜索文件的起始目录。
        expression属性由选项,搜索模式和由运算符分隔的操作组成。

    我们来看看以下命令:

    linuxidc@linuxidc:~$ find  -L /home/linuxidc/linuxmi/ -name "*.js" -exec chmod 644 {} ;

    此命令包含一个参数-L(options),它允许find跟随符号链接,在/home/linuxidc/linuxmi/ (path…)下搜索所有以.js(expression)结尾的文件的整个目录树,并设置所有匹配的权限 文件到644。

    按类型查找文件

    要指定要查找的文件的类型,请使用-type参数。

    您可以使用以下描述符指定文件类型:

    f:常规文件
    d:目录
    l:符号链接
    c:字符设备
    b:块设备
    p:命名管道(FIFO)
    s:套接字

    例如,如果要查找当前目录中的所有目录,只需运行:

    linuxidc@linuxidc:~/linuxmi$ find . -type d
    .
    ./www.linuxidc.com
    ./m.linuxidc.com
    ./linuxidc.com
    linuxidc@linuxidc:~/linuxmi$

    或者,如果要列出系统类型上的所有字符设备:

    find / -type c

    要将所有文件权限更改为644并将所有目录权限更改为755,请递归运行以下命令:

    linuxidc@linuxidc:~/linuxmi$ find /home/linuxidc/linuxmi -type d -exec chmod 0755 {} ;
    linuxidc@linuxidc:~/linuxmi$ find /home/linuxidc/linuxmi -type f -exec chmod 0644 {} ;

    按名称查找文件

    按名称查找文件可能是find命令最常用的用法。 要按名称查找文件,请将-name选项与要搜索的文件的名称一起传递。

    要在/home/linuxidc/linuxmi目录中搜索名为document.pdf的文件,您将使用以下命令:

    linuxidc@linuxidc:~$ sudo find /home/linuxidc/linuxmi -type f -name linuxidc.pdf
    [sudo] linuxidc 的密码: 
    /home/linuxidc/linuxmi/linuxidc.pdf
    linuxidc@linuxidc:~$ sudo find /home/linuxidc -type f -name linuxidc.pdf
    /home/linuxidc/linuxmi/linuxidc.pdf
    /home/linuxidc/Documents/linuxidc.pdf
    linuxidc@linuxidc:~$

    如果要进行不区分大小写的搜索,请使用-iname更改-name选项:

    sudo find /home/linuxidc -type f -iname linuxidc.pdf

    上面的命令将匹配linuxidc.pdf,LINUXIDC.pdf ...。

    按扩展名查找文件

    按扩展名搜索文件按名称搜索文件相同。 例如,如果要查找/home/linuxidc目录中以.log.gz结尾的所有文件,可以使用:

    linuxidc@linuxidc:~$ su -
    密码: 
    root@linuxidc:~# find /home/linuxidc -type f -name '*.log.gz'
    /home/linuxidc/linuxmi/linuxidc.log.gz
    root@linuxidc:~#

    值得一提的是,当我们使用通配符时,我们必须引用模式或使用反斜杠来转义星号*符号,以便它不会被shell解释。

    如果要查找与正则 *.log.gz不匹配的所有文件,可以使用-not参数,例如查找所有不以*.log.gz结尾的文件,您将使用:

    linuxidc@linuxidc:~$ find /home/linuxidc/linuxmi -type f -not -name '*.log.gz'
    /home/linuxidc/linuxmi/linuxidc.pdf
    /home/linuxidc/linuxmi/linuxidc.js
    linuxidc@linuxidc:~$

    按大小查找文件

    要根据大小查找文件,只需传递-size参数和大小标准。 您可以使用以下后缀来指定大小:

    b:512字节块(默认)
    c:字节
    w:双字节字
    k:Kilobytes
    M:兆字节
    G:千兆字节

    假设您正在'/ tmp'目录中搜索正好1024字节的所有文件。 你将不得不运行如下命令:

    linuxidc@linuxidc:~$ su -
    密码: 
    root@linuxidc:~# find /tmp -type f -size 1024c

    find命令还允许您搜索大于或小于指定大小的文件。

    在下面的示例中,我们将在当前工作目录中搜索小于1MB的所有文件,请注意size值之前的减号:

    root@linuxidc:~# find . -type f -size -1M
    ./.local/share/zeitgeist/fts.index/flintlock
    ./.local/share/Trash/files/wine-Ubuntu-wine-builds-artful.list.save
    ./.local/share/gnome-settings-daemon/input-sources-converted
    ./.mozilla/firefox/jrqxh55p.default/SecurityPreloadState.txt
    ./.mozilla/firefox/jrqxh55p.default/AlternateServices.txt
    ./.mozilla/firefox/jrqxh55p.default/.parentlock
    ./.config/enchant/en_US.exc
    ./.config/enchant/en_US.dic
    root@linuxidc:~#
    
     

    如果要搜索大小超过1MB的文件,则需要使用加号+符号:

    root@linuxidc:~# find . -type f -size +1M

    您甚至可以搜索大小范围内的文件,例如以下命令将查找3到4 MB之间的所有文件:

    root@linuxidc:~# find . -type f -size +3M -size 4M

    按修改日期查找文件

    find命令还可以根据上次修改,访问或更改时间搜索文件。

    与按尺寸搜索时相同,我们也可以使用加号和减号来指定大于或小于。

    让我们说几天前你修改了一个dovecot配置文件,但你忘记了文件名。您可以轻松过滤/home/linuxidc/conf.d/目录中以.conf结尾的所有文件,并在过去10天内修改过:

    find /home/linuxidc/conf.d -name "*.conf" -mtime 10

    以下是使用-daystart选项根据修改日期过滤文件的另一个示例。列出/home目录中20天或更久以前修改过的所有文件:

    find /home -mtime +20 -daystart

    按权限查找文件

    如果要使用find命令根据文件权限过滤文件,则需要使用-perm参数。

    要在/home/linuxidc/html目录中查找权限为775的所有文件,您将使用:

    find /home/linuxidc/html -perm 644

    您可以在数字模式前加上减号 - 或斜杠/。

    如果使用/作为前缀,则至少一个类别(用户,组或其他)必须至少为文件匹配设置相应的位。请考虑以下示例命令:

    find . -perm 444

    上述命令将匹配为用户,组或其他人设置了读权限的所有文件。

    如果使用 - 作为前缀,则必须至少设置要匹配的文件。

    以下命令将搜索对其所有者具有读取和权限的文件,但该组和其他用户可以读取但不写入的文件:

    find . -perm -664

    按所有者查找文件

    要查找特定用户或组拥有的文件,可以使用-user和-group选项。

    例如,要搜索用户linuxidc拥有的所有文件和目录,只需运行:

    find / -user linuxidc

    这是更高级的示例,假设您要查找用户www-data拥有的所有文件,并将匹配文件的所有权从www-data更改为linuxmi:

    find / -user www-data -type f  -exec chown linuxmi {} ;

    查找和删除文件

    要删除所有匹配的文件,请将参数-delete添加到匹配表达式的末尾。

    仅当您确定结果仅与要删除的文件匹配时,请确保使用此选项。在使用-delete选项之前打印文件总是一个好主意。

    例如,要删除/home/linuxidc/中以.temp结尾的所有文件,您将使用:

    find /home/linuxidc/ -name `*.temp` -delete

    总结

    在本教程中,您学习了如何根据各种标准使用Linux查找实用程序,现在您已基本了解如何在Linux系统上查找文件。

  • 相关阅读:
    PHP单引号和双引号的区别
    thinkphp实现导航高亮的简单方法
    js选中当前菜单后高亮显示的导航条
    Dubbo新版管控台
    把本人基于Dubbo的毕业设计分享粗来~
    Windows 查看端口占用情况
    GitLab 环境搭建【CentOS7】
    【非专业前端】vue+element+webpack
    【非专业前端】使用vue2.5.17+element2.4.5
    ElasticSearch6.3.2------入门
  • 原文地址:https://www.cnblogs.com/ncy1/p/9465884.html
Copyright © 2020-2023  润新知