Linux find 命令 | 在指定的目录层级下查找文件和目录
• 最后修改:2025-06-27 • 阅读量:441
Linux find ( find ) 命令用于在指定的目录层级(层次结构)下查找文件和目录。
find 命令的定义解释
find ( find ) 命令是 Linux 和 FreeBSD 系统管理员工具箱中最强大的工具之一。它根据用户给定的表达式在目录层次结构中搜索文件和目录,并可以对每个匹配的文件执行用户指定的操作。要在目录中搜索文件,find命令需要对该目录具有读权限。
您可以使用 find
命令根据文件和目录的权限、类型、日期、所有权、大小等来搜索它们。find 命令还可以与其他命令(如 grep
或 sed
)结合使用。
find 命令语法
find 命令的语法形式为:
find [options] [starting-point...] [expression]
[options]
:可选的选项,用于控制符号链接的处理、调试选项和优化方法[starting-point]
:在其中搜索文件的起始目录或多个目录(也称:path)[expression]
:表达式由测试、动作、全局选项、位置选项、运算符组成。- find 命令中的选项可分为前置选项(此语法中 options)和 expression(表达式)中的全局选项、位置选项
find 命令使用示例
使用文件名查找文件
1、使用表达式 ( expression ) 中的选项 -name
查找对应文件名的文件:
find /home/u1sz -name file1.txt
输出内容为:
file1.txt
2、如果不区分文件中英文字母的大小写,使用 -iname
选项:
find /home/u1sz -iname file1.txt
输出内容为:
/home/u1sz/File1.txt
/home/u1sz/file1.txt
使用文件扩展名查找文件
1、使用表达式 ( expression ) 中的选项 -name
配合正则表达式的通配符 *
配置任意文件名并附加文件扩展名查找文件:
find /home/u1sz -name "*.txt"
输出内容为:
File1.txt
file1.txt
file2.txt
file3.txt
注意:
- 在文件名中使用正则表达式的通配符
*
时,文件名必须加引号,否则不能匹配通配符 - 要匹配字符星号
*
时,需要使用反斜杠\
对星号转义,如:匹配文件名file*.txt
,指定的文件名字符串为"file\*.txt"
2、使用表达式 ( expression ) 中的选项 -not
查找所有不匹配正则表达式 *.txt
的文件:
find /home/u1sz -not -name "*.txt"
结果可能会输出很多内容。
使用文件类型查找文件
有时可能需要搜索特定的文件类型,如常规文件、目录或符号链接。在 Linux 中,一切都是文件。
要根据文件类型搜索文件,请使用 -type
选项并指定文件类型的描述符,文件类型有:
符号 | 解释说明 |
---|---|
f | 常规文件 |
d | 目录 |
l | 符号链接 |
c | 字符设备 |
b | 块设备 |
p | 命名管道 (FIFO) |
s | 套接字 |
1、查找当前目录下的所有目录:
find . -type d
2、使用 chmod
命令递归地将网站文件权限更改为 644
,目录权限更改为 755
:
find /var/www/my_website -type d -exec chmod 0755 {} \;
find /var/www/my_website -type f -exec chmod 0644 {} \;
使用文件大小查找文件
要根据文件大小查找文件,需要传递 -size
选项和大小标准。您可以使用以下后缀来指定文件大小:
后缀 | 解释说明 |
---|---|
b | 512 字节的块(默认) |
c | 字节 |
w | 双字节字 |
k | 千字节 |
M | 兆字节 |
G | 千兆字节 |
查找小于给定的大小标准:大小标准前加 -
查找大于给定的大小标准:大小标准前加 +
查找一定大小范围内文件,联合使用 -
+
1、查找当前目录下 1024 字节大小的所有文件:
find . -type f -size 1024c
2、查找当前目录下小于 1M 的所有文件:
find . -type f -size -1M
3、查找当前目录下大于 1M 的所有文件:
find . -type f -size +1M
4、查找当前目录下大于 1M 小于 10M 的所有文件:
find . -type f -size +1M -size -10M
根据修改日期查找文件
find 命令可以根据文件的最后修改、访问或更改时间搜索文件。
查找小于给定修改时间的前面加 -
查找大于给定修改时间的前面加 +
1、查找当前目录下 5 天前修改的文件:
find . -mtime 5
根据权限查找文件
find 命令根据文件权限查找文件,需要使用 -perm
选项。
可以在权限的八进制字符串前加上减号 -
或斜杠 /
做限制:
- 当使用斜杠
/
作为前缀时,在权限的三个类别(用户、组或其他用户)中至少又一个类别匹配其相应的权限为,则匹配成功。 - 当使用减号
-
作为前缀时,匹配的文件至少要包含设置的权限位,即:文件的权限设置大于等于给定的权限。
1、查找/var/www/html目录中权限为 775 的所有文件:
find /var/www/html -perm 755
2、查找当前目录下,用户、组或其他用户中只要有一类对文件具有读权限的文件:
find . -perm /444
3、查找用户至少有读写权限、组和其他用户至少有读权限的文件:
find . -perm -664
find 命令 options 选项解释
该选项是 find 命令的前置选项,而不是表达式(expression)中的全局选项或位置选项,前置选项是如何处理符号链接。
如下给出了 Linux find 命令中常用选项的解释说明:
选项 | 解释说明 |
---|---|
-L | 查找符号链接 |
-P | 不查找符号链接 |
find 命令表达式 expression 解释
表达式由测试(Tests)、动作(Actions)、全局选项(Global options)、位置选项(Positional options)、运算符(Operators)组成。
表达式中动作的解释
如下给出了 find 命令表达式中常用动作的解释说明:
动作 | 解释说明 |
---|---|
-exec command ; | 执行命令,如果返回 0,则为True。在字符 ; 之前的参数,都被作为命令的参数。命令参数中的字符串 {} 会替换成当前文件名。这两个结构可能都需要做转义(用 \ )处理,以便不使 shell 对它们做单独处理。指定的命令对每个匹配的文件运行一次。命令在起始目录下执行。在使用 -exec 动作时,存在不可避免的安全问题;您应该使用 -execdir 选项代替。 |
-exec command {} + | 它是 -exec 动作的变体在选定的文件上运行指定的命令,但是命令行是通过在末尾附加每个选定的文件名来构建的;命令调用的总次数将远远少于匹配文件的数量。命令行的构建方式与 xargs 构建命令行的方式大致相同。命令中只允许有一个 {} 实例,并且它必须出现在末尾,紧接在 + 之前;它需要做转义(用 \ )处理,使它不被shell解释。命令在起始目录下执行。如果任何带有‘ +’形式的调用返回非零值作为退出状态,则 find 返回非零退出状态。如果 find 遇到错误,有时会导致立即退出,因此一些挂起的命令可能根本不会运行。由于这个原因 -exec my-command ... {} + -quit 可能不会导致实际运行 my-command 。-exec 的这种变体总是返回 true 。 |
表达式中测试的解释
测试 | 解释说明 |
---|---|
-amin n | 查找在第 n 分钟内被访问过的文件 |
-atime n | 查找在第 n*24 小时内被访问过的文件 |
-cmin n | 查找在第 n 分钟内产生变化的文件 |
-ctime n | 查找在第 n*24 小时内产生变化的文件 |
-mmin n | 查找在第 n 分钟内被修改过的文件 |
-mtime n | 查找在第 n*24 小时内被修改过的文件 |
-user | 查找特定用户的文件 |
-group | 查找特定组的文件 |
+n
表示大于该时间-n
表示小于该时间
结语
在本教程中我们介绍了如何使用 find ( find ) 命令用于在指定的目录层级(层次结构)下查找文件和目录。find ( find ) 命令是 Linux 和 FreeBSD 系统管理员工具箱中最强大的工具之一。它根据用户给定的表达式在目录层次结构中搜索文件和目录,并可以对每个匹配的文件执行用户指定的操作。要在目录中搜索文件,find命令需要对该目录具有读权限。
您可以使用 find
命令根据文件和目录的权限、类型、日期、所有权、大小等来搜索它们。find 命令还可以与其他命令(如 grep
或 sed
)结合使用。
该 cmp 命令可以在 Linux 系统中使用,也可以在 FreeBSD 系统中使用。