在linux 有时我们只我知道内容但不知道文件在哪,可以使用find 与grep查找
例1 要查找指定目录(默认包含子目录)文件内容包含 xxx 的文件
find /etc/ -type f -exec grep -l "mysql" {} +
指令详细说明:
find .
: 在当前目录及其子目录中查找文件。-type f
: 仅匹配文件,而不是目录。-exec grep -l "mysql" {} +
: 对于找到的每个文件,执行grep -l "mysql"
命令。-l
选项表示只输出包含匹配项的文件名,而不是显示匹配的具体内容。-exec
:这个选项告诉 find
命令,在找到的文件上执行指定的命令。{}
:这是一个占位符,它表示 find
命令找到的每个文件名。当 -exec
选项与 {}
结合使用时,{}
将被替换为实际的文件名。+
:这个符号告诉 find
命令,在一次执行中处理尽可能多的文件。这意味着 find
将尽可能多地将文件名传递给命令。相比之下,-exec
选项的另一种用法是使用 ;
(分号),它表示对于每个找到的文件都会执行一次命令,这可能会导致多次执行相同的命令,因此效率较低。
执行后找到所有包含mysql 内容的文件
从结果上看文件有点多,我们可以排除不找子目录只需加 -maxdepth 1 参数:
find /etc/ -type f -maxdepth 1 -exec grep -l "mysql" {} +
查找排除查找子目录,如下图:
find 命令用于在目录结构中查找文件或目录。find 命令可以根据文件名、文件类型、文件权限、文件大小、文件修改时间等条件进行查找。
find 命令的基本格式如下:
find [options] path [expression]
options 指定 find 命令的选项,可以指定查找范围、查找条件等。
path 指定查找的路径。
expression 指定查找条件,可以根据文件名、文件类型、文件权限、文件大小、文件修改时间等条件进行查找。
options 选项的详细说明如下:
expression 表达式的详细说明如下:
例如,以下命令将查找当前目录下所有以 .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 命令的选项和表达式,实现各种复杂的查找需求。
grep 命令用于在文件中查找指定的字符串或正则表达式。grep 命令的基本格式如下:
grep [options] pattern [files]
options 指定 grep 命令的选项,可以指定查找范围、查找条件等。
pattern 指定查找的字符串或正则表达式。
files 指定要查找的文件。
options 选项的详细说明如下:
pattern 表达式的详细说明如下:
例如,以下命令将查找当前目录下所有包含字符串 "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 命令的选项和表达式,实现各种复杂的查找需求。