linux 查找文件或查找内容 (find grep)

qyhua 2024-07-07 17:07:02 阅读 84

一 linux 查找包含指定内容的文件

在linux 有时我们只我知道内容但不知道文件在哪,可以使用find 与grep查找

  例1 要查找指定目录(默认包含子目录)文件内容包含 xxx 的文件

<code>find /etc/ -type f -exec grep -l "mysql" {} +

  指令详细说明:

find .: 在当前目录及其子目录中查找文件-type f: 仅匹配文件,而不是目录。-exec grep -l "mysql" {} +: 对于找到的每个文件,执行grep -l "mysql"命令。-l选项表示只输出包含匹配项的文件名,而不是显示匹配的具体内容。-exec:这个选项告诉 find 命令,在找到的文件上执行指定的命令。grep:这是要执行的命令,即查找文件内容的命令。{}:这是一个占位符,它表示 find 命令找到的每个文件名。当 -exec 选项与 {} 结合使用时,{} 将被替换为实际的文件名。+:这个符号告诉 find 命令,在一次执行中处理尽可能多的文件。这意味着 find 将尽可能多地将文件名传递给命令。相比之下,-exec 选项的另一种用法是使用 ;(分号),它表示对于每个找到的文件都会执行一次命令,这可能会导致多次执行相同的命令,因此效率较低。

 

  执行后找到所有包含mysql 内容的文件 

 从结果上看文件有点多,我们可以排除不找子目录只需加 -maxdepth 1 参数:

<code>find /etc/ -type f -maxdepth 1 -exec grep -l "mysql" {} +

查找排除查找子目录,如下图: 

 

二 资料扩展:

1 find 命令详解

find 命令用于在目录结构中查找文件或目录。find 命令可以根据文件名、文件类型、文件权限、文件大小、文件修改时间等条件进行查找。

find 命令的基本格式如下:

<code>find [options] path [expression]

options 指定 find 命令的选项,可以指定查找范围、查找条件等。

path 指定查找的路径。

expression 指定查找条件,可以根据文件名、文件类型、文件权限、文件大小、文件修改时间等条件进行查找。

options 选项的详细说明如下:

-name:根据文件名进行查找。-type:根据文件类型进行查找。-perm:根据文件权限进行查找。-size:根据文件大小进行查找。-mtime:根据文件修改时间进行查找。-ctime:根据文件创建时间进行查找。-uid:根据文件所有者 ID 进行查找。-gid:根据文件组 ID 进行查找。-user:根据文件所有者进行查找。-group:根据文件组进行查找。-newer:查找比指定文件更新的文件。-newermt:查找比指定文件更新的文件,指定文件修改时间的绝对时间戳。-newerc:查找比指定文件更新的文件,指定文件创建时间的绝对时间戳。-exec:对查找到的文件执行指定的 shell 命令。-ok:与 -exec 相同,但在执行 shell 命令之前会询问用户是否确认。-depth:指定查找的深度。-follow:跟随符号链接。-prune:跳过指定目录。-or:指定多个查找条件,满足任一条件的文件都将被查找到。-and:指定多个查找条件,必须满足所有条件的文件才会被查找到。

expression 表达式的详细说明如下:

*****:匹配所有文件。?:匹配任意一个字符。[seq]:匹配指定范围内的字符。!:取反操作。

例如,以下命令将查找当前目录下所有以 .txt 结尾的文件:

find . -name "*.txt"

以下命令将查找当前目录下所有属于用户 root 的文件:

find . -user root

以下命令将查找当前目录下所有创建时间在 2 天前的文件:

find . -mtime -2

以下命令将查找当前目录下所有大小在 100 KB 到 1 MB 之间的文件:

find . -size +100k -size -1m

以下命令将对查找到的文件执行 cat 命令,将文件内容输出到屏幕:

find . -name "*.txt" -exec cat {} \;

以下命令将对查找到的文件执行 rm 命令,将文件删除:

find . -name "*.txt" -exec rm {} \;

find 命令提供了非常强大的查找功能,可以根据各种条件进行查找。在实际使用中,可以根据需要灵活组合 find 命令的选项和表达式,实现各种复杂的查找需求。

2 grep命令详解

grep 命令用于在文件中查找指定的字符串或正则表达式。grep 命令的基本格式如下:

grep [options] pattern [files]

options 指定 grep 命令的选项,可以指定查找范围、查找条件等。

pattern 指定查找的字符串或正则表达式。

files 指定要查找的文件。

options 选项的详细说明如下:

-n:显示行号。-c:显示匹配行数。-i:忽略大小写。-f:指定匹配模式的文件。-v:反向查找,只显示不匹配的行。-r:递归查找子目录中的文件。-l:只显示匹配的文件名。

pattern 表达式的详细说明如下:

*****:匹配所有字符。?:匹配任意一个字符。[seq]:匹配指定范围内的字符。^:匹配行的开始。$:匹配行的结束。|:或操作。&:与操作。

例如,以下命令将查找当前目录下所有包含字符串 "hello" 的行:

grep "hello" .

以下命令将查找当前目录下所有包含字符串 "hello" 的行,并显示行号:

grep -n "hello" .

以下命令将查找当前目录下所有包含字符串 "hello" 的行,忽略大小写:

grep -i "hello" .

以下命令将查找当前目录下所有包含字符串 "hello" 的行,匹配模式来自文件 pattern.txt

grep -f pattern.txt .

以下命令将查找当前目录下所有以 .txt 结尾的文件,并显示包含字符串 "hello" 的行:

grep "hello" *.txt

以下命令将查找当前目录下所有以 .txt 结尾的文件,并显示包含字符串 "hello" 的行,忽略大小写:

grep -i "hello" *.txt

grep 命令提供了非常强大的查找功能,可以根据各种条件进行查找。在实际使用中,可以根据需要灵活组合 grep 命令的选项和表达式,实现各种复杂的查找需求。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。