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

 rm -r *.pyc

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


当前回答

添加到~/.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 . -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得到错误。

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

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

现在在PyPI上有一个包pyclean,它很容易使用,而且是跨平台的。用户只需要一个简单的命令行来清理当前目录下的所有__pycache__文件:

pyclean .

我曾经用过一个别名

$ which pycclean

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