查找所有包含特定扩展名的字符串的文件

查找所有包含特定扩展名的字符串的文件

我想知道如何递归地找到路径“./”下所有扩展名为.xml且包含字符串“Jason”的文件?.py

或者我怎样才能将其排除.po在搜索之外?

答案1

您可以仅使用 grep 来完成此操作(无需使用 find):

grep --include=\*.{xml,py} -Rl ./ -e "Jason"

排除.po:

grep --exclude=*.po --include=\*.{xml,py} -Rl ./ -e "Jason"

答案2

尝试以下命令。它将仅在.xml.py文件中搜索您的名字:

find . -type f \( -iname \*.xml -o -iname \*.py \) | xargs grep "Jason"

希望这可以帮助!

答案3

这可以通过结合find和来实现grep。这是一个小演示 - 我有一个包含 6 个 txt 和 rtf 文件的测试目录,其中两个包含字符串“Jason”。

CURRENT DIR:[/home/xieerqi/testdir]
$ find . -type f \( -iname "*.txt" -o -iname "*.rtf" \) -exec grep -iR 'jason' {} +                                        
./foo1.txt:Jason
./bar1.txt:Jason

CURRENT DIR:[/home/xieerqi/testdir]
$ ls                                                                                                                       
bar1.rtf  bar1.txt  bar2.rtf  bar2.txt  foo1.rtf  foo1.txt  foo2.rtf  foo2.txt

CURRENT DIR:[/home/xieerqi/testdir]
$ find . -type f \( -iname "*.txt" -o -iname "*.rtf" \) -exec grep -iR 'jason' {} +                                        
./foo1.txt:Jason
./bar1.txt:Jason

我们在这里找到所有带有 txt 和 rtf 扩展名的文件,并将它们全部作为参数提供给 grep。这.意味着在当前目录中搜索,但您可以指定另一个路径,并将find进入该目录和子目录,以递归方式搜索。

用你的扩展替换,最终答案是

find . -type f \( -iname "*.xml" -o -iname "*.py" \) -exec grep -iR 'jason' {} + 

答案4

从上面的问题中我理解,你需要显示所有带有“Jason”字符串的文件。所以,也许这可以帮助你:

find . -type f \( -name "*.xml" -o -name "*.py" \) | grep -r "Jason" | cut -d':' -f1 | uniq

相关内容