递归删除当前目录下的所有文件、空目录以及具有多个名称文件的目录,包括当前目录

递归删除当前目录下的所有文件、空目录以及具有多个名称文件的目录,包括当前目录

我正在尝试删除所有 *.pyc 和pycache,以及任何其他我不想看到的愚蠢文件语言需要运行。我得到的最接近的是

sudo rm -rf **/*__pycache__

答案,这在路径深处不起作用,并且

sudo rm -R -f {__pycache__,.*.pyc}

这不起作用pycache文件夹。

webapi/__pycache__
webapi/cool_app/__pycache__
webapi/cool_app/bad_file.pyc
webapi/cool_app/keep_this_awesomeness.py
webapi/cool_app/sweet_folder/__pycache__
webapi/cool_app/sweet_folder/bad_file.pyc
webapi/cool_app/sweet_folder/keep_this_awesomeness.py

仅有的

webapi/cool_app/keep_this_awesomeness.py 
webapi/cool_app/sweet_folder/keep_this_awesomeness.py

保持。

答案1

find . \( -name __pycache__ -o -name "*.pyc" \) -delete

答案2

如果您的 shell 支持,您可以使用 shell 本身进行递归遍历并用于rm删除文件。

例如,在 中bashglobstarshell 选项允许 glob 模式**匹配任何深度的子目录,并且您还可以使用常规的 globbing 运算符来匹配文件。

在你的情况下:

rm **/{*.pyc,__pycache__}

会做。

首先,启用globstar

shopt -s globstar

答案3

在你的情况下,你也可以这样做

find . -name "__pycache__" -o -name "*.pyc" | xargs rm -rf

仅使用内置命令制作。它可以避免您启用 globstar。

相关内容