find 命令
find 命令提供了相当多的查找条件,主要作用是沿着文件层次结构向下遍历,匹配符合条件的文件,并执行相应的操作。
(1)格式:find [选项] [搜索路径] [表达式]
默认路径是当前目录,默认表达式为-print。
表达式可能由下列成份组成:操作符、选项、测试表达式以及动作。
(2)常用参数:
find 命令将匹配的文件输出到标准输出 | |
-exec | find 命令对匹配的文件执行该参数所给出的 shell 命令 |
-name | 按照文件名查找文件 |
-iname | 按照文件名查找文件(忽略大小写) |
-type | 查找某一类型的文件 |
-prune | 使用这一选项可以使 find 命令不在当前指定的目录中查找,如果同 时使用-depth 选项,那么-prune 将被 find 命令忽略 |
-user | 按照文件属主来查找文件 |
-group | 按照文件所属的组来查找文件 |
-mtime -n +n | 按照文件的更改时间来查找文件,-n 表示文件更改时间距现在小于 n天,+n 表示文件更改时间距现在大于 n 天,find 命令还有-atime 和 -ctime 选项 |
或者使用以下代码查看其它命令
find --help
或者查看 https://www.gnu.org/software/findutils/ 中的文档,有更详细的信息。
(3)示例:
显示的数据很多,需要手动停止( 按Ctrl + z)
打印当前目录下的文件目录列表 :
find . -print
打印当前目录下所有以.txt 结尾的文件名:
find . -name "*.txt" -print
打印当前目录下所有以.txt 或.pdf 结尾的文件名:
find . \( -name "*.pdf" -or -name "*.txt" \)
打印当前目录下所有不以.txt 结尾的文件名:
find . ! -name "*.txt"
怎么根据文件类型、权限、所有者及操作符来查找匹配文件呢?
根据文件类型来查找文件,使用-type 选项,根据文件权限查找文件,使用-perm 选项,所有者使用-user 选项。
常见文件类型如下:
b | 块设备文件 |
c | 字符设备文件 |
d | 目录 |
f | 普通文件 |
l | 符号链接 |
find 命令也可以通过逻辑操作符来创建更复杂的逻辑关系。
find 命令的逻辑操作符如下:
打印当前目录下 root 用户拥有的所有文件:
find . -type f -user root
打印当前目录下所有以.txt 结尾的符号链接:
find . -type l -name "*.txt" -print
打印当前目录下所有权限为 777 的 php 文件(web 服务器上的 php 文件一般需要执行权限):
find . -type f -name "*.php" -perm 777
打印当前目录下权限不是 777 和 664 的所有文件,可以使用如下命令:
find . -type f \( ! -perm 777 -and ! -perm 644 \)
怎么使用 find 命令的-exec 选项来实现对查找到的文件执行指定的动作命令呢?
find 命令中 -exec 完整语法:
find /path -name "*.txt" -exec ls -l {} \;
find -exec 是 Linux/Unix 中用于对搜索到的文件执行操作的强大工具,核心要点如下:
{} 是占位符,会被替换为每个匹配的文件名。
\; 是必须转义的结束符(每个文件单独执行命令)。
+ 可代替 \; 提高效率(一次性传递多个文件)。
安全用法:建议用 -- 防止文件名被误解析为参数,如 -exec cmd -- {} +。
常见用途:批量删除、修改权限、查找内容等。
交互模式:可用 -ok 代替 -exec 进行逐条确认。
查找到所有的 c 语言代码文件,然后将这些文件内容写入到一个文件中,并下载该文件:
find . -name "*.c" -exec cat {} \; > all.c
本文参考每天一个linux命令目录 - peida - 博客园,感谢博主,每天学习,继续努力!