当前位置:  开发笔记 > 编程语言 > 正文

如何从项目中删除所有.pyc文件?

如何解决《如何从项目中删除所有.pyc文件?》经验,为你挑选了13个好方法。

我已经在一个相当大的项目中重命名了一些文件,并希望删除他们留下的.pyc文件.我尝试了bash脚本:

 rm -r *.pyc

但是这并没有像我想象的那样通过文件夹递归.我究竟做错了什么?



1> Bill the Liz..:
find . -name "*.pyc" -exec rm -f {} \;


Find有一个内置的"-delete"动作,所以你可以只做"找到".-name\*.pyc -delete`
最重要的是,如果这是一台开发机器,你可以设置PYTHONDONTWRITEBYTECODE = True,你永远不需要再这样做了.请参阅:[此答案](http://stackoverflow.com/questions/154443/how-to-avoid-pyc-files/154617#154617).
`-delete`不是POSIX规范的一部分,并且不能保证在`find`的所有实现中都存在.
如果你害怕 - 这可能是好的 - 使用-exec echo {}进行第一次传递,或者 - 如果你非常*害怕 - 使用rm -i {}每次询问你或rm - v {}所以你看看你删除了什么.
你没有引用`{}`.如果意外地分词并删除了一个恰好被称为路径片段的中间路径,会发生什么?

2> Andy Baker..:

find . -name '*.pyc' -delete

当然最简单.


+1.这个命令比比尔蜥蜴目前接受的命令更安全.任何带有`rm -rf`的命令都有点吓人.:)
如果你的`find`版本支持`-delete`; 它不是POSIX标准的一部分.
另外,请考虑"-r"在这里完全没必要."rm -f"就足够了.
`-name'*.py?'`包括`.pyo,.pyc,...`
这会忽略.pyo文件和`__pycache__`目录.看我的回答.
请确保-delete是命令中的最后一件事。我不小心在发现之后放了-delete。它删除了所有内容!

3> jb...:

在debian的当前版本中,您有包中的pyclean脚本python-minimal.

用法很简单:

pyclean .


值得注意的是,pyclean似乎只删除了.pyc文件,其中有相应的.py文件(至少在我的系统上 - ubuntu 12.10.)这意味着它在源文件被删除而你想要的情况下不是很有用清理剩余的.pyc文件.

4> Wilfred Hugh..:

添加到您的~/.bashrc:

pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}

这将删除所有.pyc和.pyo文件和__pycache__目录.它也非常快.

用法很简单:

$ cd /path/to/directory
$ pyclean



5> d0k..:

如果你正在使用bash> = 4.0(或zsh)

rm **/*.pyc

请注意,在递归扫描整个目录树时,*/*.pyc选择.pyc直接的第一级子目录中的所有文件**/*.pyc.例如,foo/bar/qux.pyc将删除rm **/*.pyc但不删除*/*.pyc.

必须启用globstar shell选项.启用globstar:

shopt -s globstar

并检查其状态:

shopt globstar



6> miku..:

我过去常常使用别名:

$ which pycclean

pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'


在目前的debian中它是pyclean.
这并不能很好地处理文件名中的空格.你应该使用`find -print0`和`xargs -0`代替.
为什么要在文件/文件夹名称中包含带空格的python代码?这在语法上是合法的吗?

7> haki..:

对于Windows用户:

del /S *.pyc



8> Ron Romero..:
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收到错误.



9> 小智..:
$ find . -name '*.pyc' -delete

这比快

$ find . -name "*.pyc" -exec rm -rf {} \;



10> Mithril..:

此外,人们通常要删除所有*.pyc,*.pyo文件和__pycache__递归当前目录的目录.

命令:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf



11> Clint Miller..:

只是为了在混合中添加另一个变体,你也可以使用这样的反引号:

rm `find . -name *.pyc`


如果有太多的匹配,这有一个失败的轻微缺点,因为将有太多的参数传递给`rm`.

12> Yeo..:

Django扩展

注意:这个答案非常特定于已经使用Django Extension的Django项目.

python manage.py clean_pyc

可以在其源代码中查看实现.



13> 小智..:

完全递归

ll **/**/*.pyc
rm **/**/*.pyc


一组"**"是多余的,并且在`d0k`的答案中,你必须在bash 4+中启用globstar才能按预期工作.即做`shopt -s globstar`或在你的一个来源bash中拥有它.文件.
推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有