我已经在一个相当大的项目中重命名了一些文件,并希望删除它们留下的 .pyc 文件。我尝试了这个 bash 脚本:
rm -r *.pyc
但是它没有像我想的那样递归文件夹。我哪里出错了?
我已经在一个相当大的项目中重命名了一些文件,并希望删除它们留下的 .pyc 文件。我尝试了这个 bash 脚本:
rm -r *.pyc
但是它没有像我想的那样递归文件夹。我哪里出错了?
find . -name "*.pyc" -exec rm -f {} \;
find . -name \*.pyc -delete
就能删除所有匹配的".pyc"文件。 - Christoffer{}
。如果不小心拆分并删除一个叫做路径片段的中间路径,而这个路径片段恰好与你发现的路径中的某个片段相同,会发生什么? - Robottinosino-delete
不是 POSIX 规范的一部分,也不保证会存在于所有 find
命令的实现中。 - chepnerfind . -name '*.pyc' -type f -delete
这无疑是最简单的。
find
版本支持 -delete
,那么它并不是 POSIX 标准的一部分。 - chepner__pycache__
目录。请看我的回答。 - Wilfred Hughesrm
不够吗(去掉 -f
)? - duozmo -name '*.py?'
修改为包括 .pyo, .pyc,...
的表达式。 - cdosborn在你的~/.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
可以解决这个问题。 - Mad Physicistpyclean .
pyclean
命令现在作为 Python 包可用,可以从 PyPI 安装(https://pypi.org/project/pyclean/),它可以跨平台使用(包括 RHEL、macOS 和 Windows)。它会删除任何 .pyc
文件,没有特殊的优先级。 - Peterino如果您使用的是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
和 rm */*.pyc
有什么区别?(后者在本地似乎可以工作。) - Taylor D. Edmistonrm */*.pyc
将删除深度为1的所有子目录中的所有 .pyc
文件。rm **/*.pyc
将删除深度为0或更深的所有子目录中的所有 .pyc
文件。 - Adam Stewart**
表示为 *
,并且运行“shopt globstar”会抛出错误)。 - Taylor D. Edmiston对于Windows用户:
del /S *.pyc
我曾经用一个别名来代替它:
$ which pycclean
pycclean is aliased to `find . -name "*.pyc" | xargs -I {} rm -v "{}"'
find -print0
和 xargs -0
代替。 - r3m0tfind . -name '*.pyc' -print0 | xargs -0 rm
该find命令递归查找*.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命令中获得错误。
$ find . -name '*.pyc' -delete
这比原来更快。
$ find . -name "*.pyc" -exec rm -rf {} \;
此外,人们通常想要递归地从当前目录中删除所有*.pyc
、*.pyo
文件和__pycache__
目录。
命令:
find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf
find
、grep
和其他类似命令在那里无法工作。 - Peterino
**/*.pyc
这样你就不用再担心它了。 - bubakazouba