我正在尝试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
。