当有数百个文件时,如何获取包含某个字符串的文件的文件名?

时间:2011-01-21 12:49:57

标签: shell

我有一个包含200个文件的文件夹。我们可以说这些文件名为“abc0”到“abc199”。其中五个文件包含字符串“ez123”,但我不知道哪些文件。我当前尝试查找包含该字符串的文件的文件名是:

#!/bin/sh
while read FILES
do
cat $FILES | egrep "ez123"
done

我有一个文件,其中包含目录中所有文件的文件名。然后我执行:

./script < filenames

这验证了包含该字符串的文件存在但我仍然没有文件名。有没有关于实现这个目标的最佳方法的想法?

由于

4 个答案:

答案 0 :(得分:3)

你可以尝试

grep -l "ez123" abc*

答案 1 :(得分:1)

find /directory -maxdepth 1 -type f -exec fgrep -l 'ez123' \{\} \; 

-maxdepth 1仅在您只想搜索目录而不是递归树(如果有)时才是必需的。)

fgrep比grep快一点。 -l仅列出匹配的文件名。

答案 2 :(得分:0)

尝试

find -type f -exec grep -qs "ez123" {} \; -print

这将使用find查找当前目录(和子目录)中的所有真实文件,对它们执行grep({}将替换为文件名,-qs表示它是静默的,只需设置一个退出代码),-print将打印出grep找到匹配行的文件的名称。

答案 3 :(得分:0)

怎么样:

xargs egrep -l ez123

从stdin读取文件名并打印出带匹配的文件名。