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

 rm -r *.pyc

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


当前回答

再加入另一种变体,你也可以像这样使用反引号:

rm `find . -name *.pyc`

其他回答

全递归

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

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

rm **/*.pyc

注意*/*。Pyc选择直接的一级子目录下的所有. Pyc文件。Pyc递归地扫描整个目录树。以foo/bar/qux为例。Pyc将被rm **/*删除。Pyc而不是*/*. Pyc。

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

shopt -s globstar

并检查其状态:

shopt globstar

Rm -r递归到目录中,但只有你给Rm的目录。它还会删除这些目录。一个解决方案是:

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

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

再加入另一种变体,你也可以像这样使用反引号:

rm `find . -name *.pyc`

如果你想删除所有*。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