删除 bash 中除特定文件之外的所有文件

删除 bash 中除特定文件之外的所有文件

我正在尝试rm -rf !(current)删除当前路径中除current文件夹之外的所有文件夹。但我收到以下错误

bash:!:未找到事件

如何在 bash 中获得此功能?

答案1

您需要启用extglob

假设我们有三个目录:

$ ls -d */
current/  future/  past/

如果没有扩展的 glob,则无法理解以下内容:

$ echo !(current)
bash: syntax error near unexpected token `('

如果我们启用extglob,则可以理解为:

$ shopt -s extglob
$ echo !(current)
future past

这成功匹配所有文件除了 current

请注意,感叹号!是 bash 激活字符。它可以调用历史扩展,如果失败,则会导致您观察到的错误。如果您不使用历史扩展,您可能需要将其关闭:set +H

相关内容