Linux find 命令 - 查找文件或目录
介绍
find 命令是 Linux 系统管理员中最强大的工具之一。find 命令会根据用户指定的表达式(权限、类型、日期、所有权、大小等条件)在目录层次结构中搜索文件和目录,并且可以对每个匹配的文件执行用户指定的操作。另外,也可以将 find 命令与其他工具结合使用,例如 grep 或 sed,实现更复杂的功能。
语法:
find [-H] [-L] [-P] [-Olevel] [-D debugopts] [path...] [expression]
选项:
path...路径属性定义搜索文件的起始目录,可以指定一个或多个起始目录。expression表达式属性由选项,搜索模式和由运算符分隔的动作组成。
要在目录中搜索文件,调用 find 命令的用户需要对起始目录以及子目录具有读取权限。
让我们看一下示例 find -L /var/www -name "*.js"。选项-L告诉find命令跟随符号链接。
/var/www是find命令搜索的开始目录。表达式-name "*.js告诉find搜索以.js结尾的文件JavaScript文件。
示例
按名称查找/搜索文件
通过名称查找文件可能是 find 命令的最常见用法。要使用文件名查找文件,请在要搜索的文件名后加上 -name 选项。
例如,要在 /home/getiot 目录中搜索名为 document.pdf 的文件,可以使用命令 find /home/getiot -type f -name document.pdf。
find 的 -name 选项是区分大小写的,如果你需要运行不区分大小写的搜索,请将 -name 选项更改为 -iname。find 命令将匹配 Document.pdf,DOCUMENT.pdf 等。
find /home/getiot -type f -iname document.pdf
按文件扩展名查找文件
根据扩展名搜索文件与按名称搜索文件相同。例如,要在 /var/log/nginx 目录中查找所有以 .log.gz 结尾的文件,可以使用下面命令。
find /var/log/nginx -type f -name '*.log.gz'
值得一提的是,使用通配符时,必须加单/双引号或用反斜杠\转义星号符号*,以避免shell解释它。
要查找与正则表达式 *.log.gz 不匹配的所有文件,可以使用 find 命令的 -not 选项。例如,要查找所有未以 *.log.gz 结尾的文件,你可以使用以下 find 命令。
find /var/log/nginx -type f -not -name '*.log.gz'
按类型查找文件
有时你可能需要搜索指定的文件类型,例如普通文件,目录或符号链接。在 Linux 中,一切都是文件,包括目录。
要根据文件的类型搜索文件,请使用 find 的 -type 选项指定文件类型。这里我们列出了 Linux 中所有文件的类型。
f 是常规文件,d 是目录,l 是符号链接,c 是字符设备,b 是块设备,p 是命名管道 FIFO,s 是 socket 套接字。
例如,要在当前工作目录中查找所有目录,可以使用命令 find . -type d,这里 . 表是当前目录,-type d 指定文件类型是目录。
常见示例是使用 chmod 命令将网站文件权限递归更改为 644,目录权限更 改为 755:
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
按大小查找文件
要根据文件大小查找文件,请使用 find 命令的 -size 选项,之后指定文件的大小。你可以使用以下后缀指定文件大小。
如果你使用 -size 选项,但为指定文件的大小,find 将会使用 512 字节作为大小进行文件的搜索。
b 是 512 字节,c 是字节,w 是两字节,k 千字节即 kb, M 是兆字节,即 MB,G 是千兆字节即是 GB。
例如命令 find /tmp -type f -size 1024c 将在 /tmp 目录中找到所有 1024 字节的文件。
find 命令还允许你搜索大于或小于指定大小的文件。你可以使用加减符号和文件的大小表示大于或者小于,+ 符号表示大于,- 减符号表示小于。
例如命令 find . -type f -size -1M,将在当前工作目录中搜索所有小于 1MB 的文件。注意大小值之前的是减号符号 -。