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

Kam*_*Mok 6 grep find

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

当单个命令有效时,此命令行无效

find . -name "*.py" | grep "def test"
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 15

尝试:

grep -r --include '*.py' 'def test'
Run Code Online (Sandbox Code Playgroud)
  • -r 告诉 grep 递归搜索文件

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

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

管道方法讨论

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

find . -name "*.py" | grep "def test"
Run Code Online (Sandbox Code Playgroud)

这里的问题是 grep 将其标准输入视为要搜索的文本。因此,唯一的输出将是名称(而不是内容)包含def test.

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

$ touch 'def test.py'
Run Code Online (Sandbox Code Playgroud)

并运行管道命令:

$ find . -name "*.py" | grep "def test"
./def test.py
Run Code Online (Sandbox Code Playgroud)

该命令根据其名称查找此文件。它的内容永远不会被检查。


Bod*_*odo 11

find . -name '*.py' -exec grep -l 'def test' {} \;
Run Code Online (Sandbox Code Playgroud)

或者

find . -name '*.py' -exec grep -l 'def test' {} +
Run Code Online (Sandbox Code Playgroud)

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