find
语法
在指定目录下查找文件和目录。
find [path] [expression]
path:是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。
expression:是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。
expression 的选项有【注:这里列举比较常用的,并不是所有的】:
- -name pattern:按文件名查找,支持使用通配符 * 和 ?。
- -type type:按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。
- -size [±]size[cwbkMG]:按文件大小查找,支持使用 + 或 - 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)、M(MB)或 G(GB)。
- -mtime days:按修改时间查找,支持使用 + 或 - 表示在指定天数前或后,days 是一个整数表示天数。
- -user username:按文件所有者查找。
- -group groupname:按文件所属组查找。
举例
查找当前目录下名为 file.txt 的文件:
find . -name file.txt
将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
find . -name "*.c"
查找 /home 目录下大于 1MB 的文件:
find /home -size +1M
grep
语法
查找文件里符合条件的字符串或正则表达式
grep [options] pattern [files]
pattern - 表示要查找的字符串或正则表达式。
files - 表示要查找的文件名,可以同时查找多个文件,如果省略 files 参数,则默认从标准输入中读取数据。
options 选项:
-i:忽略大小写进行匹配。
-v:反向查找,只打印不匹配的行。
-n:显示匹配行的行号。
-r:递归查找子目录中的文件。
-l:只打印匹配的文件名。
-c:只打印匹配的行数。
举例
1、在文件 index.js 中查找字符串 “xxx”,并打印匹配的行:
grep xxx index.js
2、在文件夹 dir 中递归查找所有文件中匹配正则表达式 “pattern” 的行,并打印匹配行所在的文件名和行号:
grep -n -r aaa .
grep -n -r aaa ./*.js
3、在标准输入中查找字符串 “world”,并只打印匹配的行数:
echo "hello world" | grep -c world
区别
从上面的截图可以看出:
grep搜索的是文本,find搜索的是文件。
一般可以结合使用,例如:
从根目录开始查找所有扩展名为 .log 的文本文件,并找出包含 “ERROR” 的行:
find / -type f -name "*.log" | xargs grep "ERROR"