我想从每次出现.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~' `