grep -r "print " */*/*/*/*/*.py */*/*/*/*.py */*/*/*.py */*/*.py
我想查找当前目录中子目录中所有"print "
个文件中.py
的所有发生情况。我想出了上面的命令并且它有效,但是我想找到某种方式来获得任意深度,因为我的一些文件的深度为3,其他文件的深度为4,其他文件的深度更高。< / p>
我很确定我可以使用find
然后管道,但我不太确定如何。
答案 0 :(得分:3)
在bash和zsh上,您可以使用**
:
grep "print " **/*.py
如果您所选择的外壳上没有双星,那么您可以使用xargs
之类的:
find . -regex ".*\.py" -print0 | xargs -0 grep "print "
答案 1 :(得分:3)
尝试将find
与-exec
find -type f -name '*.py' -exec grep -H 'print ' {} \;
为了获得更好的效果,请将find
与xargs
find -type f -name '*.py' -print0 | xargs -0 grep 'print '
答案 2 :(得分:2)
不需要管道。
find some/dir -name '*.py' -exec grep -H "print " {} \;
答案 3 :(得分:1)
如果您的grep
支持--include
选项,请使用它:
grep -R --include='*.py' 'print ' .
这绝对是最好的选择。其他答案中的xargs
选项可能更好,因为它以有效的方式使用多线程。
有趣:告诉您的grep
是否处理此选项,您当然可以man grep
然后使用按键--include
在那里搜索字符串/--include
,或者您可以:
man grep | grep -- --include
或
grep --help | grep -- --include
否则,由于没有人提到使用-exec ... +
的{{1}}方式,因此它是:
find
但这不如find -type f -name '*.py' -exec grep -H 'print ' {} +
方式好。但如前所述,grep --include
方法的多线程处理能力应该会更好。