我已经在一个相当大的项目中重命名了一些文件,并希望删除它们留下的.pyc文件。我尝试了bash脚本:
rm -r *.pyc
但这并没有像我想的那样遍历文件夹。我究竟做错了什么?
**/*.pyc
那么您就不必再担心它了
我已经在一个相当大的项目中重命名了一些文件,并希望删除它们留下的.pyc文件。我尝试了bash脚本:
rm -r *.pyc
但这并没有像我想的那样遍历文件夹。我究竟做错了什么?
**/*.pyc
那么您就不必再担心它了
Answers:
find . -name "*.pyc" -exec rm -f {} \;
find . -name \*.pyc -delete
{}
。如果不小心分词并删除了一条中间路径,而该中间路径恰好像您找到的路径的一部分一样被调用,将会发生什么情况?
-delete
不是POSIX规范的一部分,也不保证在的所有实现中都存在find
。
find . -name '*.pyc' -delete
当然最简单。
find
支持-delete
; 它不是POSIX标准的一部分。
__pycache__
目录。看我的答案。
-name '*.py?'
包括.pyo, .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 . -type d -name "__pycache__" -delete
经常会警告您缺少路径,因为显然在删除文件夹之前,内容会添加到队列中。2>/dev/null
应该解决这个问题。
如果您使用的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 **/*.pyc
vs vs 跑步有什么区别rm */*.pyc
?(后者似乎在本地为我工作。)
rm */*.pyc
将删除.pyc
深度1的所有子目录中的rm **/*.pyc
所有.pyc
文件。将删除深度0+的所有子目录中的所有文件
**
,*
当运行时,运行时shopt globstar
抛出错误)。
我曾经为此使用别名:
$ which pycclean
pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'
find -print0
和xargs -0
代替。
对于Windows用户:
del /S *.pyc
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-empty可以防止您从rm中获取错误。
此外,人们通常希望递归地删除当前目录中的所有*.pyc
,*.pyo
文件和__pycache__
目录。
命令:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
find
,grep
并且和朋友在那儿不工作。
如果您不再需要.pyc,则可以在终端中使用以下单行:
export PYTHONDONTWRITEBYTECODE=1
如果您改变主意:
unset PYTHONDONTWRITEBYTECODE
rm -r
递归到目录,但只有您指定的目录rm
。它还将删除这些目录。一种解决方案是:
for i in $( find . -name *.pyc )
do
rm $i
done
find
会在当前目录中递归找到所有* .pyc文件,for
循环将遍历找到的文件列表,并删除每个文件。
find
,其-exec
谓语:find . -name '*.pyc' -exec rm {} +
(更好的,更短,更安全,更健壮,更有效)。
如果要从项目文件夹中删除所有.pyc文件。
首先,你有
cd <path/to/the/folder>
然后找到所有.pyc文件并删除。
find . -name \*.pyc -delete
rm
则将使用参数[-r,a.pyc,b.pyc]进行调用。