如何使用 find 一次删除 *.py~ 和 *.pyc 文件?

Ale*_*lex 7 find

我想从.py.pyc文件的每次出现中清理一个目录(和子目录)。我尝试了以下

find . -name '*pyc' -o -name '*py~' -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)

这遗漏了所有pyc文件。做的时候

find . -name '*pyc' -o -name '*py~'
Run Code Online (Sandbox Code Playgroud)

该命令将查找pyc未删除的文件。任何见解?

Sté*_*las 10

-a运营商(两个谓词之间隐含的)的优先级高于-o,所以你需要括号:

find . \( -name '*pyc' -o -name '*py~' \) -a -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)

(我包含-a以上内容仅用于演示目的,不需要,因为它是隐式的)。我替换;+因为rm如果可以避免的话,每个文件运行一个可能没有意义。

  • @Aif,因为`-delete` 不是标准选项。无论如何,如果您的“find”支持它,请使用它,但不要在旨在可移植的脚本中使用它。 (6认同)

h3r*_*ler 10

而不是使用-o为什么不只是做一个通配符模式?

find . -name '*py[c~]' -delete
Run Code Online (Sandbox Code Playgroud)

或者:

find . -name '*py[c~]' -exec rm -f {} +
Run Code Online (Sandbox Code Playgroud)

  • 这个特殊情况的好点。请注意,它不是正则表达式,它仍然是 shell 通配符模式。 (2认同)