我有成千上万个需要装满旧垃圾的文件夹。也就是说,我需要使用掩码在文件中查找所有包含特定文本的文件。但是,如果我使用 grep -R“ mask” 进行操作,它将搅乱所有垃圾内容,从而导致机器卡住。 我想通过管道将find和cat结果传递给grep,但找不到正确的方法。
a=$(find ./ -name "*.txt")
for i in $a; do
cat $i | grep "string" >> result.txt
done
类似的东西,但似乎不起作用。我在哪里傻?
答案 0 :(得分:1)
您不需要cat
。
grep "string" $i
更快。
您也不需要find
。
您需要的命令是:
grep -r -l "string" --include="*.txt" .
它的运行速度比find
和grep
的任何组合都要快,因为它仅运行一个进程。
参数:
-r
告诉grep
递归处理输入目录(.
)。-l
告诉它取消其正常输出,仅回显匹配文件的名称。它运行更快,因为它会在每个文件的第一个匹配项上停止。"string"
是您要搜索的文本。--include="*.txt"
将搜索限制为名称与模式匹配的文件。 *.txt"
周围的引号是必需的;没有它们,shell会将*.txt
扩展到当前目录中的匹配文件列表。.
是用于搜索文件的目录;此示例中的当前目录。