如何列出所有包含“def test”的python测试脚本

如何列出所有包含“def test”的python测试脚本

想要列出所有包含“def test”的python测试脚本

该命令行不起作用,而单个命令起作用

find . -name "*.py" | grep "def test"

答案1

尝试:

grep -r --include '*.py' 'def test'
  • -r告诉 grep 递归搜索文件

  • --include '*.py'告诉 grep 只检查名称以.py.

--include两者都支持该选项GNU (Linux) grepMacOS grep

管道方法的讨论

在以下命令中,find 将找到的文件的名称传递到 grep 的标准输入:

find . -name "*.py" | grep "def test"

这里的问题是 grep 将其标准输入视为要搜索的文本。因此,唯一的输出将是那些文件姓名(与内容相对)包含def test.

例如,让我们创建一个空文件:

$ touch 'def test.py'

并运行管道命令:

$ find . -name "*.py" | grep "def test"
./def test.py

该命令根据其名称找到该文件。它的内容从未被检查过。

答案2

find . -name '*.py' -exec grep -l 'def test' {} \;

或者

find . -name '*.py' -exec grep -l 'def test' {} +

grep第二个版本将通过指定文件集作为参数来减少调用。

答案3

grep -ril 'def test' .

上面的命令会列出您正在查找的内容。

在命令中 - 选项 ril 指的是递归(r)不区分大小写(i)搜索和仅列出(l)文件名

答案4

对找到的文件执行命令的标准方法find是使用 xargs:

find . -name "*.py" | xargs grep "def test"

对于 grep,您可以使用递归 grep 而不是 find + grep,正如其他答案所解释的那样,但 xargs 很高兴知道,因为它是一种通用方法,也可用于其他用例。

(正如 Doug O'Neal 评论的那样:如果文件名带有空格,则必须告诉 find 和 xargs 使用空字符作为终止符find . -name "*.py" -print0 | xargs -0 grep "def test":)

相关内容