我重命名了一个相当大的项目中的一些文件,并想删除他们留下的.pyc文件。我尝试了bash脚本:
rm -r *.pyc
但它并没有像我想的那样递归遍历文件夹。我做错了什么?
我重命名了一个相当大的项目中的一些文件,并想删除他们留下的.pyc文件。我尝试了bash脚本:
rm -r *.pyc
但它并没有像我想的那样递归遍历文件夹。我做错了什么?
当前回答
Django扩展
注意:这个答案非常特定于已经使用了Django Extension的Django项目。
python manage.py clean_pyc
实现可以在源代码中查看。
其他回答
再加入另一种变体,你也可以像这样使用反引号:
rm `find . -name *.pyc`
find . -name '*.pyc' -print0 | xargs -0 rm
find函数递归地查找*。佩克文件。xargs接收该名称列表并将其发送给rm。-print0和-0告诉这两个命令用空字符分隔文件名。这使得它能够正确地处理包含空格的文件名,甚至包含新行的文件名。
使用-exec的解决方案是有效的,但是它会为每个文件生成一个新的rm副本。在一个较慢的系统或有很多文件,这将花费太长时间。
你也可以添加更多的参数:
find . -iname '*.pyc' -print0 | xargs -0 --no-run-if-empty rm
Iname增加了大小写不区分,比如*。佩克。如果没有这样的文件,no-run-if-empty可以防止从rm得到错误。
如果你使用bash >=4.0(或zsh)
rm **/*.pyc
注意*/*。Pyc选择直接的一级子目录下的所有. Pyc文件。Pyc递归地扫描整个目录树。以foo/bar/qux为例。Pyc将被rm **/*删除。Pyc而不是*/*. Pyc。
必须启用globstar shell选项。启用globstar:
shopt -s globstar
并检查其状态:
shopt globstar
Django扩展
注意:这个答案非常特定于已经使用了Django Extension的Django项目。
python manage.py clean_pyc
实现可以在源代码中查看。
现在在PyPI上有一个包pyclean,它很容易使用,而且是跨平台的。用户只需要一个简单的命令行来清理当前目录下的所有__pycache__文件:
pyclean .