![查找所有包含特定扩展名的字符串的文件](https://linux22.com/image/876325/%E6%9F%A5%E6%89%BE%E6%89%80%E6%9C%89%E5%8C%85%E5%90%AB%E7%89%B9%E5%AE%9A%E6%89%A9%E5%B1%95%E5%90%8D%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E6%96%87%E4%BB%B6.png)
我想知道如何递归地找到路径“./”下所有扩展名为.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