我正在尝试编写一个非常简单的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 extglob
和rm !(filename1|filename2) -rf
外部的脚本做工精细.
可能是我提出了一个我无法看到的标准和基本的bash脚本错误,但经验即将到来......
有什么建议!?提前致谢.
我可以立即看到两个问题:
-rf
参数rm
一定要来之前的文件名!
,(
,|
并且)
应该不会用反斜杠转义试试这个:
rm -rf !(filename1|filename2|filename3)
Run Code Online (Sandbox Code Playgroud)
如果它仍然无法正常工作,请删除-f
参数,然后您将收到有关出错的错误消息,而不是默默地抑制它们.要打印出已删除的每个文件的名称,您也可以添加该-v
选项.