Linux find 命令 | 在指定的目录层级下查找文件和目录
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 系统中使用。