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

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

我想从每次出现.py.pyc文件时清理目录(和子目录)。我尝试了以下方法

find . -name '*pyc' -o -name '*py~' -exec rm -f {} \;

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

find . -name '*pyc' -o -name '*py~'

该命令会查找pyc未删除的文件。有什么见解吗?

答案1

为什么不直接使用通配符模式而-o不是使用通配符模式呢?

find . -name '*py[c~]' -delete

或者:

find . -name '*py[c~]' -exec rm -f {} +

答案2

运算-a符(两个谓词之间隐式的)优先于-o,因此您需要括号:

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

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

答案3

如果你有 bash 4+,你甚至不需要 find,因为 globstar 会给你递归的通配符:

shopt -s globstar
for f in ./**/*.py{c,~}; do rm "$f"; done

请注意,shopt需要独占一行,而不是用 a 分隔;(并且应该在脚本的最顶部使用,如果可能的话,直接在 shebang 下方使用)。

答案4

我知道这个问题并不是那么新......但也许它足以使用

rm -f `find . -name '*.pyc' -o -name '*.py~' `

相关内容