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

 rm -r *.pyc

但它并没有像我想的那样递归遍历文件夹。我做错了什么?


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

find函数递归地查找*。佩克文件。xargs接收该名称列表并将其发送给rm。-print0和-0告诉这两个命令用空字符分隔文件名。这使得它能够正确地处理包含空格的文件名,甚至包含新行的文件名。

使用-exec的解决方案是有效的,但是它会为每个文件生成一个新的rm副本。在一个较慢的系统或有很多文件,这将花费太长时间。

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

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

Iname增加了大小写不区分,比如*。佩克。如果没有这样的文件,no-run-if-empty可以防止从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

找到。- name”*。Pyc ' -type f -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 Extension的Django项目。

python manage.py clean_pyc

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


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

命令:

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

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

export PYTHONDONTWRITEBYTECODE=1

如果你改变主意:

unset PYTHONDONTWRITEBYTECODE

你可以运行find。- name”*。Pyc " -type f -delete。

但要谨慎使用。首先运行查找。- name”*。Pyc”键入f以查看要删除的文件。

此外,确保-delete是命令中的最后一个参数。如果你把它放在名字*之前。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 .

不得不在M1上添加一些忽略参数:

pyclean --verbose . --ignore "Library",".Trash"