linux:查找相关命令find与grep

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"

猜你喜欢

转载自blog.csdn.net/weixin_43972437/article/details/130601662
今日推荐