我重命名了一个相当大的项目中的一些文件,并想删除它们留下的. pyc文件。我尝试了bash脚本:
rm -r *.pyc
但这并不像我想象的那样在文件夹中递归。我做错了什么?
find . -name "*.pyc" -exec rm -f {} \;
rm -r递归到目录中,但仅限于您提供给rm的目录。它还会删除这些目录。一种解决方案是:
rm -r
rm
for i in $( find . -name *.pyc ) do rm $i done
find将递归查找当前目录中的所有*. pyc文件,for循环将遍历找到的文件列表,删除每个文件。
find
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删除。
*/*.pyc
.pyc
**/*.pyc
foo/bar/qux.pyc
必须启用Globstar shell选项。要启用globstar:
globstar
shopt -s globstar
并检查其状态:
shopt globstar
find . -name '*.pyc' -delete
当然是最简单的。
只是为了将另一个变体放入混合中,您还可以使用像这样的反引号:
rm `find . -name *.pyc`
全递归
ll **/**/*.pyc rm **/**/*.pyc
在当前版本的debian中,您有pyclean脚本,它位于python-minimal包中。
pyclean
python-minimal
用法很简单:
pyclean .
添加到您的~/.bashrc:
~/.bashrc
pyclean () { find . -type f -name "*.py[co]" -delete find . -type d -name "__pycache__" -delete }
这会删除所有. pyc和. pyo文件以及__pycache__目录。它也非常快。
__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项目。
python manage.py clean_pyc
可以在其源代码中查看实现。
此外,人们通常希望在当前目录中递归删除所有*.pyc、*.pyo文件和__pycache__目录。
*.pyc
*.pyo
命令:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
如果你不再需要. pyc,你可以在终端中使用这一行:
如果你改变主意:
unset PYTHONDONTWRITEBYTECODE
您可以运行find . -name "*.pyc" -type f -delete。
find . -name "*.pyc" -type f -delete
但是要谨慎使用它。首先运行find . -name "*.pyc" -type f以准确查看您将删除哪些文件。
find . -name "*.pyc" -type f
此外,请确保-删除是命令中的最后一个参数。如果您将其放在-name*. pyc参数之前,它将删除所有内容。
如果要从项目文件夹中删除所有. pyc文件。
首先,你有
cd <path/to/the/folder>
然后找到所有的. pyc文件并删除。
find . -name \*.pyc -delete
如果您想在当前目录中递归删除所有*.pyc文件和__pycache__目录:
import os os.popen('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__文件:
py3clean为我工作!
py3clean
cd /usr/local/lib/python3.9 sudo py3clean -v .