删除除特定文件夹以外的所有内容

Delete everything but a specific folder

我想知道我会向 rm -rf 传递什么选项来删除除 .git/ 文件夹以外的所有文件夹。我正在阅读手册页,但我对您可以传入的选项感到困惑。如果我想删除除 .git/ 以外的所有命令,命令是什么?

一个可能的解决方案是使用 find 查找目录中 不是 .git 的所有项目,然后 rm 它们:

> find . -mindepth 1 -maxdepth 1 ! -name .git -print0| xargs -0 rm -rf;

与bash :

shopt -s extglob
rm -rf !(.git)

注意在 运行 这个命令之前在 good 目录中。

勾选http://mywiki.wooledge.org/glob#extglob

您可以使用 bash GLOBIGNORE 变量删除特定文件以外的所有文件

来自 bash(1) 页面:

A colon-separated list of patterns defining the set of filenames to be ignored
by pathname expansion. If a filename matched by a pathname expansion pattern
also matches one of the patterns in GLOBIGNORE, it is removed from the list
of matches.

要删除除 zip 和 iso 文件之外的所有文件,请按如下方式设置 GLOBIGNORE:

GLOBIGNORE=*.git
rm -rf *
unset GLOBIGNORE

PS。仅适用于 BASH