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
如何防止脚本将“”添加到命令中?
解决方案
使用查找命令
for BASE in Adenina Citocina Guanina Timina
do
find ${BASE} -type f ! -name "*.psf" ! -name "*.fdf" ! -name "siesta" ! -name"*.log" -delete
done
推荐阅读
- javascript - 在 cPanel 文件管理器中打开 public_html 中的 zip 后网站出现 403 错误
- node.js - MongooseError: operation `.deleteOne()`, `.deleteMany()`, 在我的不和谐机器人启动时。猫鼬 v5.12.14
- php - MySQL:按第二列排序——如果不为空——同时保持第一列顺序
- wordpress - WordPress插件在网站关闭时将电子邮件发送到特定的电子邮件地址?
- python - 如何在隐身模式下默认打开 Jupyter Notebook (Chrome)
- javascript - 电子邮件主题应根据单元格值更改
- python - 使用 api 获取自定义字段 ID 时如何使用凭据
- reactjs - 在 React 中使用带有地图的模拟数据制作多个提要
- javascript - 如何在 JavaScript 或 Node.js 中生成 MD5 密码字符串哈希?
- awk - awk 是二维数组还是类似于存储值的东西?