我已经在一个相当大的项目中重命名了一些文件,并希望删除他们留下的.pyc文件.我尝试了bash脚本:
rm -r *.pyc
但是这并没有像我想象的那样通过文件夹递归.我究竟做错了什么?
find . -name "*.pyc" -exec rm -f {} \;
find . -name '*.pyc' -delete
当然最简单.
在debian的当前版本中,您有包中的pyclean
脚本python-minimal
.
用法很简单:
pyclean .
添加到您的~/.bashrc
:
pyclean () { find . -type f -name "*.py[co]" -delete find . -type d -name "__pycache__" -delete }
这将删除所有.pyc和.pyo文件和__pycache__
目录.它也非常快.
用法很简单:
$ cd /path/to/directory $ pyclean
如果你正在使用bash> = 4.0(或zsh)
rm **/*.pyc
请注意,在递归扫描整个目录树时,*/*.pyc
选择.pyc
直接的第一级子目录中的所有文件**/*.pyc
.例如,foo/bar/qux.pyc
将删除rm **/*.pyc
但不删除*/*.pyc
.
必须启用globstar shell选项.启用globstar
:
shopt -s globstar
并检查其状态:
shopt globstar
我过去常常使用别名:
$ which pycclean pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'
对于Windows用户:
del /S *.pyc
find . -name '*.pyc' -print0 | xargs -0 rm
查找以递归方式查找*.pyc文件.xargs获取名称列表并将其发送到rm.-print0和-0告诉两个命令用空字符分隔文件名.这允许它在包含空格的文件名上正常工作,甚至包含新行的文件名.
使用-exec的解决方案可以正常工作,但它会为每个文件创建一个rm的新副本.在一个慢速系统或许多文件上,这将花费太长时间.
你还可以添加几个args:
find . -iname '*.pyc' -print0 | xargs -0 --no-run-if-empty rm
iname添加不区分大小写,如*.PYC.如果没有这样的文件,no-run-if-empty可以防止rm收到错误.
$ find . -name '*.pyc' -delete
这比快
$ find . -name "*.pyc" -exec rm -rf {} \;
此外,人们通常要删除所有*.pyc
,*.pyo
文件和__pycache__
递归当前目录的目录.
命令:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
只是为了在混合中添加另一个变体,你也可以使用这样的反引号:
rm `find . -name *.pyc`
注意:这个答案非常特定于已经使用Django Extension的Django项目.
python manage.py clean_pyc
可以在其源代码中查看实现.
完全递归
ll **/**/*.pyc rm **/**/*.pyc