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

Shell 当有数百个文件时,如何获取包含特定字符串的文件名?,shell,Shell,我有一个文件夹,里面有200个文件。我们可以说这些文件名为“abc0”到“abc199”。其中五个文件包含字符串“ez123”,但我不知道是哪一个。我当前尝试查找包含字符串的文件的文件名是: #!/bin/sh while read FILES do cat $FILES | egrep "ez123" done 我有一个包含目录中所有文件的文件名的文件。然后我执行: ./script < filenames /script

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

#!/bin/sh
while read FILES
do
cat $FILES | egrep "ez123"
done
我有一个包含目录中所有文件的文件名的文件。然后我执行:

./script < filenames
/script<文件名
这是为我验证包含字符串的文件是否存在,但我仍然没有文件名。关于实现这一目标的最佳方式,有什么想法吗

谢谢

试试看

find -type f -exec grep -qs "ez123" {} \; -print
这将使用
find
查找当前目录(和子目录)中的所有真实文件,对它们执行
grep
({}将被文件名替换,-qs告诉它保持沉默并只设置退出代码),-print将打印出grep在其中找到匹配行的文件名。

尝试

find -type f -exec grep -qs "ez123" {} \; -print
这将使用
find
查找当前目录(和子目录)中的所有真实文件,对它们执行
grep
({}将被文件名替换,-qs告诉它保持沉默并只设置退出代码),-print将打印出grep在其中找到匹配行的文件名。

如何:

xargs egrep -l ez123
从stdin读取文件名并打印出匹配的文件名。

那么:

xargs egrep -l ez123
find /directory -maxdepth 1 -type f -exec fgrep -l 'ez123' \{\} \; 
从stdin读取文件名并打印出匹配的文件名

find /directory -maxdepth 1 -type f -exec fgrep -l 'ez123' \{\} \; 
-maxdepth 1
仅当您只想递归搜索目录而不是树(如果有)时才需要)

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

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

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

您可以尝试

grep -l "ez123" abc*
你可以试试

grep -l "ez123" abc*

谢谢你的反馈,解决了这个问题,从此我能过上幸福的生活!谢谢你的反馈,解决了这个问题,从此我能过上幸福的生活!