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

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

 rm -r *.pyc

但这并不像我想象的那样在文件夹中递归。我做错了什么?

356171 次浏览
find . -name "*.pyc" -exec rm -f {} \;

rm -r递归到目录中,但仅限于您提供给rm的目录。它还会删除这些目录。一种解决方案是:

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

find将递归查找当前目录中的所有*. pyc文件,for循环将遍历找到的文件列表,删除每个文件。

find . -name '*.pyc' -print0 | xargs -0 rm

查找递归查找*. pyc文件。xargs获取该名称列表并将其发送到rm。-print0和-0告诉这两个命令用空字符分隔文件名。这允许它在包含空格的文件名上正常工作,甚至是包含新行的文件名。

使用-exec的解决方案可以工作,但它会为每个文件生成一个新的rm副本。在慢速系统或有大量文件的情况下,这会花费太长时间。

您还可以添加更多参数:

find . -iname '*.pyc' -print0 | xargs -0 --no-run-if-empty  rm

iname添加了不区分大小写的功能,例如*. PYC。如果没有这样的文件,则no-run-if-空可以防止您从rm收到错误。

我曾经使用过一个别名:

$ which pycclean


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

如果您使用的是bash>=4.0(或zsh)

rm **/*.pyc

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

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

shopt -s globstar

并检查其状态:

shopt globstar

find . -name '*.pyc' -delete

当然是最简单的。

只是为了将另一个变体放入混合中,您还可以使用像这样的反引号:

rm `find . -name *.pyc`

全递归

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

在当前版本的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
$ find . -name '*.pyc' -delete

这比

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

第一轮:

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

然后添加:

export PYTHONDONTWRITEBYTECODE=1

转到~/. Profile

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

对于windows用户:

del /S *.pyc

Django扩展

注意:此答案非常具体到已经使用Django扩展Django项目

python manage.py clean_pyc

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

此外,人们通常希望在当前目录中递归删除所有*.pyc*.pyo文件和__pycache__目录。

命令:

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

如果你不再需要. pyc,你可以在终端中使用这一行:

export PYTHONDONTWRITEBYTECODE=1

如果你改变主意:

unset PYTHONDONTWRITEBYTECODE

您可以运行find . -name "*.pyc" -type f -delete

但是要谨慎使用它。首先运行find . -name "*.pyc" -type f以准确查看您将删除哪些文件。

此外,请确保-删除是命令中的最后一个参数。如果您将其放在-name*. pyc参数之前,它将删除所有内容。

如果要从项目文件夹中删除所有. pyc文件。

首先,你有

cd <path/to/the/folder>

然后找到所有的. pyc文件并删除。

find . -name \*.pyc -delete

如果您想在当前目录中递归删除所有*.pyc文件和__pycache__目录:

  • 使用python:
import os


os.popen('find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf')
  • 或手动使用终端或cmd:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf

删除当前目录中的所有python编译文件。

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

现在PyPI上有一个包pyClean,易于使用,跨平台。用户只需要一个简单的命令行来清理当前目录中的所有__pycache__文件:

pyclean .

py3clean为我工作!

cd /usr/local/lib/python3.9
sudo py3clean -v .