find 和 grep 在 Linux 下被称为“黄金搭档”
find = 找“文件”(按文件名、文件大小、修改时间,在硬盘目录里找文件)。
grep = 找“内容”(按文字、正则表达式,在一个文件里面找特定的文字串)。
find [搜索起点目录] [匹配条件] [动作]
匹配条件参数:
-name:按文件名查找(区分大小写)。
-iname:按文件名查找(不区分大小写,比如找 readme 也能找到 README)。
find ~ -name "readme.txt" 在家目录下找名叫 readme.txt 的文件
-type:按类型查找。(linux下一切皆文件,总共分为七种:-普通文件;d目录文件;l软链接;b块设备;c字符设备;p管道;s套接字文件;)
find . -type f (找普通文件)。
-size:按文件大小查找
find / -size +100M (找超过 100MB 的大文件)。
find . -size -10k (找小于 10KB 的小文件)。
-mtime:按修改时间查找(以“天”为单位)
find . -mtime -1 (找1天内修改过的文件)。
find . -mtime +30 (找30天前修改过的文件)。
-exec:对找到的文件执行后续的命令(这是最强大的动作,通常配合 {} \; 使用)。
find . -name "*.log" -exec rm {} \; (找到所有 .log 结尾的日志文件并删除它们)。
grep [选项] "要搜索的字符串" [要搜索的文件或目录]
选项如下所示:
-r 或 -R:递归搜索(如果目标是个目录,会连带子目录里的所有文件一起搜,非常重要)。
grep -r "include" ./kernel/ (在 kernel 目录下搜所有包含 include 字样的文件)。
-i:忽略大小写。
grep -i "hello" main.c (能搜到 hello、Hello、HELLO)。
-n:显示匹配行在文件中的行号(排查代码必用)。
grep -n "error" log.txt (不仅告诉你有 error,还告诉你发生在第几行)。
-l:只显示包含匹配字符的文件名,不显示具体内容(有时只想找文件)。
grep -rl "CONFIG_ARCH" ./ (在当前目录递归寻找包含 CONFIG_ARCH 的文件,并只列出文件名)。
-w:全字匹配(不匹配单词的一部分)。
假设文件里有个词 main,如果搜 ma(不加 -w)会搜到;如果加 -w,只有包含完整单词 main 的行才会被搜出。
-E:支持扩展的正则表达式(如 | 或运算)。
grep -E "error|warning" log.txt (在日志里同时搜 error 或 warning)。
--color=auto:把搜到的关键词标红/标亮显示(默认常在配置文件中开启,强烈建议使用)。
find和grep组合:
组合 1:找文件,并且在文件里搜内容(查源码最常用)
在当前项目下,找出所有 .c 文件,并且看看哪些文件里写了 dma_alloc。
find . -name "*.c" -exec grep -n "dma_alloc" {} \;
组合 2:找文件,并批量删除
删除当前目录下 所有 7 天前生成的 .log 备份日志。
find . -name "*.log" -mtime +7 -exec rm {} \;
组合 3:反向查找(排除特定字符串)
kernel/ 目录下找所有包含 dma,但是不包含 dma_alloc 的文件:
grep -rn "dma" ./kernel/ | grep -v "dma_alloc"
(grep -v 的意思是剔除含有该字符串的行)

22万+

被折叠的 条评论
为什么被折叠?



