find 是一个功能强大的命令行工具,用于在文件系统中搜索文件和目录。它可以基于多种条件来定位文件,并对找到的文件执行操作。以下是 find 命令的详细解释和它的选项:

1. 基本用法:

– find [path] [expression]:在指定的路径(默认为当前目录)下搜索文件,根据提供的表达式。

2. 路径指定:

– -path pattern:搜索路径匹配 pattern 的文件或目录。

– -P pattern:与 -path 类似,但不使用通配符扩展。

3. 文件名匹配:

– -name pattern:搜索文件名匹配 pattern 的文件。

– -iname pattern:与-name类似,但搜索时不区分大小写。

pattern常用的通配符:
*:匹配任意数量的字符(包括零个字符)。
?:匹配任意单个字符。
[abc]:匹配方括号内的任意一个字符,例如a、b或c。
[!abc]:匹配不在方括号内的任意一个字符。
[[:class:]]:匹配指定字符类中的任意一个字符,例如[[:digit:]]匹配任意数字字符。

– -regex pattern:搜索文件名符合正则表达式的文件。

– -iregex pattern:与 -regex 类似,但不区分大小写。

– -type type:常见类型包括:f(普通文件)、d(目录)、l(符号链接)、b(块设备文件)、c(字符设备文件)、p(管道)、s(套接字)。

4. 文件大小:

-size n[cwbkMG]:根据文件大小查找,n为指定的字节数,可使用c(字节)、w(双字)、b(块)、k(千字节)、M(兆字节)、G(吉字节)等单位。

可以使用 + 和 – 符号表示大于或小于指定的大小。

示例:find /var -size +1M 搜索 /var 目录下大于 1MB 的文件。

5. 时间戳:

– -atime n:搜索在 n 天内被访问过的文件。

– -mtime n:搜索在 n 天内被修改过的文件。

– -ctime n:搜索在 n 天内 inode(文件属性)被更改的文件。

数字n以及正负号,决定了查找的时间范围。具体来说:

-mtime n:表示查找在n*24小时前恰好被修改过的文件。这里的“恰好”意味着文件的修改时间正好落在指定的那一天内,但不包括之前或之后的时间。
-mtime -n:表示查找在最近n*24小时之内(包括第n天)被修改过的文件。
-mtime +n:表示查找在n*24小时之前(不包括第n天)被修改过的文件。

– -newer file:搜索比 file 新的文件。

– -newerXY file:搜索比 file 新或旧的文件,X 和 Y 是时间单位(如 d 天、w 周、m 月、y 年)。

6. 文件权限:

– -perm mode:搜索权限模式匹配 mode 的文件。

– -perm -mode:搜索权限模式至少包含 mode 的文件。

– -perm /mode:搜索权限模式完全匹配 mode 的文件。

7. 文件所有者和组:

– -user name:搜索属于用户 name 的文件。

– -group name:搜索属于组 name 的文件。

8. 符号链接:

– -follow:跟随符号链接。

– -nofollow:不跟随符号链接。

9. 文件系统:

– -mount:在文件系统挂载点处停止搜索。

– -xdev:不跨越文件系统挂载点。

10. 搜索深度:

– -maxdepth n:限制搜索的最大深度。

– -mindepth n:限制搜索的最小深度。

11. 排除和包含:

– -prune pattern:排除匹配 pattern 的路径。

– -path pattern -prune:排除匹配 pattern 的路径,但不包括路径本身。

12. 执行操作:

– -exec command {} \;:对找到的每个文件执行 command,{} 会被替换为文件名,\; 表示命令结束。

– -ok command {} \;:与 -exec 类似,但在执行前会提示用户确认。

13. 输出和处理:

– -print:打印找到的文件名。

– -print0:与 -print 类似,但使用 null 字符作为分隔符。

– -delete:删除找到的文件。

– -execdir command \;:在每个文件所在的目录执行 command。

14. 其他选项:

– -xtype:与 -type 类似,但只搜索与指定类型相同的文件。

– -samefile file:搜索与 file 具有相同 inode 的文件。

– -inum n:搜索 inode 号为 n 的文件。

– -regextype type:指定正则表达式的类型,如 posix-awk、posix-egrep 等。

这些选项可以组合使用,以实现复杂的搜索条件。

例如,find . -type f -name “*.txt” -mtime -1 会搜索当前目录及其子目录中在过去一天内修改过的 .txt 文件。

在使用 find 时,建议查阅 man find 或使用 find –help 来获取最新的帮助信息和支持的选项。