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
的文件。注意大小值之前的是减号符号 -
。
命令 find . -type f -size +1M
将搜索大小大于 1MB
的文件,注意大小值之前的是加号符号 +
。
你甚至可以搜索大小范围内的文件。以下 find 命令将在当前目录下搜索/查找 1MB
到和 2MB
之间的所有文件。
find . -type f -size +1M -size 21M