Bash脚本删除除特定文件和目录之外的所有文件和目录

mar*_* go 10 bash shell rm

我正在尝试编写一个非常简单的Bash shell脚本,该脚本将在特定目录中cd,它将删除除少数选定的文件和目录之外的所有文件和目录,然后cd回原始目录.

我的代码是:

#!/bin/bash 
cd /path/to/desired/directory
shopt -s extglob
rm !\(filename1\|filename2\|filename3\) -rf
cd -
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多不同的方式来写符号"("和"|",单或双引号或反斜线但是毫无效果.注意,.shopt -s extglobrm !(filename1|filename2) -rf外部的脚本做工精细.

可能是我提出了一个我无法看到的标准和基本的bash脚本错误,但经验即将到来......

有什么建议!?提前致谢.

Ada*_*eld 8

我可以立即看到两个问题:

  • -rf参数rm一定要来之前的文件名
  • 该extglob符!,(,|并且)应该不会用反斜杠转义

试试这个:

rm -rf !(filename1|filename2|filename3)
Run Code Online (Sandbox Code Playgroud)

如果它仍然无法正常工作,请删除-f参数,然后您将收到有关出错的错误消息,而不是默默地抑制它们.要打印出已删除的每个文件的名称,您也可以添加该-v选项.