首页 > 解决方案 > Bash 脚本删除除选定文件之外的所有文件

问题描述

我有我的 bash 脚本

#!/bin/bash
set -euxo pipefail
I_PATH=$(pwd)

shopt -s extglob 

for BASE in Adenina Citocina Guanina Timina
do
    cd ${BASE}
    rm !(*.psf|*.fdf|siesta|*.log)
    cd ${I_PATH}
done

我希望它删除除排除文件之外的所有文件。问题是bash执行命令如下

rm '!(*.psf|*.fdf|siesta|*.log)'

然后脚本失败

rm: cannot remove '!(*.psf|*.fdf|siesta|*.log)': No such file or directory

如何防止脚本将“”添加到命令中?

标签: bash

解决方案


使用查找命令

for BASE in Adenina Citocina Guanina Timina
do
  find ${BASE} -type f ! -name "*.psf" ! -name "*.fdf" ! -name "siesta" ! -name"*.log" -delete
done

推荐阅读