网站首页 > 基础教程 正文
说明
find是一个强大的文件搜索命令,可以根据名称、大小、类型、权限属性、时间戳等在指定目录下查找对应文件和目录,并对查找结果执行各种操作。相比Windows 简直不要太方便,不过使用起来确实有些门槛,需要记忆很多命令。本文介绍一下常用命令,遇到特殊需求时可以在搜索资料。
命令格式
find命令的格式为: find [-H] [-L] [-P] [-D debugopts] [-Olevel] [路径...] [表达式]。下文对每一部分做详细解释。
第一部分[-H] [-L] [-P] [-D debugopts] [-Olevel]
HLP...用于调整命令的行为,包括如何处理符号链接、调试输出级别等。以下是一些常见的 find 命令选项及其作用。
-H:当-H选项存在时,表示跟随命令行上的符号链接。这意味着find将进入符号链接所指向的目录进行搜索。
-L 选项表示跟随所有符号链接。无论符号链接是在命令行上还是在搜索期间遇到的,都会被解引用并进入链接所指向的目录。
-P 选项表示不跟随符号链接。即,find 将忽略符号链接,直接在它们所在的目录中进行搜索。
-D 选项用于指定调试选项,允许输出调试信息以便进行故障排除。debugopts 是一个字符串,可以包含多个调试选项。
-Olevel:
-O 选项用于设置调试输出级别,其后可跟随级别值。级别值通常在 0 到 3 之间,表示调试输出的详细程度,0 表示关闭调试输出,3 表示最高详细级别。
这些选项允许你在使用 find 命令时定制搜索的方式,特别是在处理符号链接和进行调试时。例如,如果你想要递归地搜索符号链接所指向的目录,可以使用 -H 或 -L 选项。如果你不想跟随符号链接,可以使用 -P 选项。调试选项和级别则允许你获取更多关于 find 命令运行过程的信息,用于故障排除和调试。
第二部分 路径
路径是可选项,不输入时表示当前目录,同 ./ ;可以是相对路径和绝对路径。
第三部分 表达式
表达式由 operators、options、test、actions四部分组成。
- operators
运算符(按优先级降序;当没有给出其他运算符时,-and 是隐含的):
( 表达式 ) ! 表达式 -not 表达式
表达式1 -a 表达式2 表达式1 -and 表达式2
表达式1 -o 表达式2 表达式1 -or 表达式2
表达式1 , 表达式2
- options
位置选项(始终为真):
-daystart
-follow
-nowarn
-regextype
-warn
常规选项(始终为真,位于其他表达式之前指定):
-depth
-files0-from FILE
-maxdepth LEVELS
-mindepth LEVELS
-mount
-noleaf
-xdev
-ignore_readdir_race
-noignore_readdir_race
- test
匹配条件(Tests): 用于匹配文件的特定属性。可以包括:
-name 模式:匹配具有指定名称模式的文件和目录。
-type 类型:指定要搜索的文件类型(f表示普通文件,d表示目录,l表示符号链接等)。
-mtime n:搜索在过去 n 天内修改过的文件。
-size N[bcwkMG]:搜索特定大小的文件。
剩余选项:
-amin N -anewer FILE -atime N -cmin N -cnewer FILE -context CONTEXT
-ctime N -empty -false -fstype TYPE -gid N -group NAME -ilname PATTERN
-iname PATTERN -inum N -iwholename PATTERN -iregex PATTERN
-links N -lname PATTERN -mmin N -newer FILE
-nouser -nogroup -path PATTERN -perm [-/]MODE -regex PATTERN
-readable -writable -executable
-wholename PATTERN -true -type [bcdpflsD] -uid N
-used N -user NAME -xtype [bcdpfls]
N 可以是 +N 或 -N 或 N
- actions
执行动作(Actions): 对于匹配的文件,执行特定的操作。可以包括:
-exec 命令 \;:对找到的文件执行指定的命令,用 \; 表示执行结束。
-print:将找到的文件的路径打印到标准输出。
全部选项:
-delete -print0 -printf FORMAT -fprintf FILE FORMAT -print
-fprint0 FILE -fprint FILE -ls -fls FILE -prune -quit
-exec COMMAND ; -exec COMMAND {} + -ok COMMAND ;
-execdir COMMAND ; -execdir COMMAND {} + -okdir COMMAND ;
实例
- 根据名称查询文件
find /path/bb -name "aa.txt" 查询 /path/bb 目录下名为aa.txt的文件。
- 根据后缀、或前缀搜索
find /path/bb -name "*.txt" 查询/path/bb 目录下以.txt结尾的文件。
find /path/bb -name "aa.*" 查询/path/bb 目录下以aa.开头的文件。
- 根据逻辑运算符多条件匹配
find 允许你使用逻辑操作符 -o(或)、-a(与)、!(非)来组合多个条件。
find /path/bb \( -name "*.txt" -o -name "*.doc" \)
要查找以 .txt 或 .doc 结尾的文件,可以使用
- 多条件组合
find /test -name "*.txt" -mtime -3
查找在 /documents 目录下过去3天内修改过的所有.txt 文件
- 根据文件类型
通过 -type 选项,你可以指定要搜索的文件类型,例如普通文件(f)或目录(d)。
find /path/bb -type f -name "*.txt"
这将查找指定路径下的所有以 .txt 结尾的普通文件。
- 根据文件大小搜索
通过-size n[c] 选项, 可以搜索指定大小的文件。匹配使用 n 单位大小的文件。单位可以是 c(字节)、k(千字节)、M(兆字节)、G(千兆字节)等。
find /path/aa -size +1M
- 根据修改时间
find /path/to/search -mtime -7
这将查找过去7天内修改过的所有文件。
- 对搜索结果执行操作,打印、删除
使用 -exec 后跟随要执行的命令,以 \; 结尾表示执行结束,你可以在找到的每个文件上执行特定的命令
find /path/aa -name "*.txt" -exec cp {} /目标目录 \; 复制所有 .txt 文件到指定目录。
-exec rm {} \; 删除搜索结果
-exec grep "pattern" {} \; 根据关键字匹配搜索结果文件中的内容。
find /要搜索的路径 -type f \( -name "*.txt" -o -name "*.doc" \) -exec cp {} /目标目录 \;
在这个例子中,find 命令将在指定路径下搜索所有的普通文件,然后使用匹配条件 -name "*.txt" -o -name "*.doc" 找到文件名以 ".txt" 或 ".doc" 结尾的文件。最后,使用 -exec cp {} /目标目录 \; 将找到的文件复制到目标目录。
请注意,在表达式中使用圆括号 () 来确保正确的条件组合,以及使用反斜杠 \ 来转义分号 ;。这有助于确保 find 命令正确解释表达式。
猜你喜欢
- 2024-10-10 Linux系统常用命令大全 linux系统常用命令大全详解
- 2024-10-10 Redis数据类型与常用指令示例 redis数据类型和用法
- 2024-10-10 深入理解Redis原理与应用,总结10个必定掌握要点,5分钟彻底看懂
- 2024-10-10 sqlserver数据库中的高级知识点有哪些?
- 2024-10-10 程序员的福音 - Apache Commons Exec
- 2024-10-10 Linux常用命令分类详解|文件搜索 linux命令分类总结
- 2024-10-10 linux性能工具perf工作原理简析 linux perl
- 2024-10-10 Python-调用系统命令或脚本,快速完成任务
- 2024-10-10 「Docker」命令使用大全,全集一览
- 2024-10-10 DOS常用命令集合 dos所有命令的命令格式
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)