Bash脚本删除除部分文件外的所有文件

  • 本文关键字:文件 脚本 删除 Bash 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

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

usefind命令

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

似乎没有匹配您的glob,导致glob被视为文字字符串。在没有匹配

的情况下,使nullglob扩展为零。不带任何参数的rm可能会打印错误,因此我们也使用rm -f

顺便说一下:Globs与大括号展开一起工作。你不需要循环或cd

shopt -s nullglob
shopt -s extglob
rm -f {Adenina,Citocina,Guanina,Timina}/!(*.psf|*.fdf|siesta|*.log)

{Aden,Citoc,Guan,Tim}ina/...,如果你想削减一些字节:)

最新更新