【发布时间】:2020-04-04 19:12:01
【问题描述】:
我目前正在使用以下代码:
#!/bin/bash
rm /media/external/archive/auth-settings.tar.raw
rm /media/external/archive/bak-settings.tar.raw
rm /media/external/archive/cont-settings.tar.raw
rm /media/external/archive/data-data.tar.raw
rm /media/external/archive/data-settings.tar.raw
rm /media/external/archive/mon-data.tar.raw
rm /media/external/archive/mon-settings.tar.raw
rm /media/external/archive/mail-data.tar.raw
rm /media/external/archive/mail-settings.tar.raw
rm /media/external/archive/portal-settings.tar.raw
rm /media/external/archive/webserver-data.tar.raw
rm /media/external/archive/webserver-settings.tar.raw
for f in /media/external/archive/*.tar.raw;
do mv "$f" "${f%.*.tar.raw}.tar.raw";
done
在新备份存档后删除旧备份。但是,如果由于某种原因存档失败,则不管怎样,此脚本都会运行,并且会删除所有存档,不留下任何内容。
我如何修改脚本以使rm 命令仅在对应的存档存在且其文件名中有计数的情况下才执行,如果编号的存档不存在则跳过删除。例如:
auth-setting.tar.raw
只有在有
时才应删除auth-settings.number.tar.raw
【问题讨论】:
-
您可以在 if 语句中使用正则表达式。在您的情况下,正则表达式类似于 "[0-9].*" 请参阅:stackoverflow.com/questions/2348379/… 您还应该为文件名使用数组,从而为您节省复制过去的工作(这会随着 rm 周围的 if 条件而增加)
标签: regex bash if-statement