是否可以从 rm -rf 中排除某些文件?

CIs*_*ies 3 command-line bash rm sh

我有一个由另一个用户填写的目录,我的任务是维护它。我想删除除具有特定名称的 2 个文件之外的所有内容。是否有可能rm或我应该这样做:

cp aaa/a ./a && cp aaa/b ./b && rm -rf aaa/* && mv ./a aaa/a && mv ./b aaa/b
Run Code Online (Sandbox Code Playgroud)

aaa目录在哪里,a,b我要保留的文件在哪里,那里还有(至少,可能有)其他文件/目录。

有更好(更短)的方法吗?

ste*_*ver 8

使用 bash 扩展的 globs,给定

$ tree aaa
aaa
??? a
??? b
??? c
??? d
??? e
??? subdir
Run Code Online (Sandbox Code Playgroud)

然后

rm -rf aaa/!(a|b)
Run Code Online (Sandbox Code Playgroud)

树叶

$ tree aaa
aaa
??? a
??? b

0 directories, 2 files
Run Code Online (Sandbox Code Playgroud)

  • 根据错误消息,您实际上是在 `bash` 中使用它,但禁用了扩展 glob 功能 - 在脚本中,您可能需要在顶部添加 `shopt -s extglob`。但是不,AFAIK 你不能在 POSIX `sh` / `dash` 中做同样的事情 (2认同)