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

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

rm -r *.pyc 

但是,这并不像我想的那样通过文件夹recursion。 我究竟做错了什么?

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

正如在注释中提到的那样,您也可以使用-delete操作

 find . -name \*.pyc -delete 

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 .pycselect直接的第一级子目录中的所有.pyc文件,而**/*.pyc .pycrecursion扫描整个目录树。 例如, foo/bar/qux.pyc将被rm **/*.pyc foo/bar/qux.pyc删除,而不会被*/*.pyc foo/bar/qux.pyc删除。

globstar shell选项必须启用。 要启用globstar

 shopt -s globstar 

并检查其状态:

 shopt globstar 

我曾经为此使用别名:

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

查找recursion查找* .pyc文件。 xargs把这个名字列表发送给rm。 -print0和-0告诉两个命令用空字符分隔文件名。 这使它可以在包含空格的文件名上正确工作,甚至包含一个新行的文件名。

使用-exec的解决scheme可以工作,但是它为每个文件创build了一个新的rm副本。 在一个缓慢的系统或有很多文件,这将花费太长时间。

你也可以添加更多的参数:

 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 {} \; 

只要把另一个变体join混合,你也可以使用这样的反引号:

 rm `find . -name *.pyc` 

完全recursion

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

Django扩展

注意:这个答案是非常特定的Django项目 ,已经使用Django扩展 。

 python manage.py clean_pyc 

实现可以在源代码中查看。

对于Windows用户:

 del /S *.pyc 

此外,人们通常要在当前目录中recursion地移除所有*.pyc*.pyo文件和__pycache__目录。

命令:

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

第一次运行:

 find . -type f -name "*.py[c|o]" -exec rm -f {} + 

然后加:

 export PYTHONDONTWRITEBYTECODE=1 

〜/ .profile

rm -rrecursion到目录中,但只递送给rm的目录。 它也将删除这些目录。 一个解决scheme是:

 for i in $( find . -name *.pyc ) do rm $i done 

find将在当前目录中recursion地查找所有* .pyc文件,而for循环将遍历find的文件列表,并删除每个文件。

 find . -name "*.pyc"|xargs rm -rf