You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash脚本生成数据库备份文件名顺序颠倒问题求助

解决Bash脚本备份文件名顺序颠倒的问题

根据你的描述,我梳理了两种可能的情况以及对应的解决办法:

情况1:希望反转数据库的处理顺序(先处理db2,再处理db1)

如果你的需求是让备份文件名的输出顺序和databases.csv里的顺序相反(原本是db1、db2,现在想要db2的文件名先输出),只需要修改读取databases.csv的方式,用tac命令反转文件内容即可:

修改后的脚本循环部分:

while IFS='' read -r db || [[ -n "$db" ]]; do
    f="$NOW";
    g="$db.$f";
    out="$g.sql"
    echo $out
    mysqldump --verbose --opt -u $user -p$passwd -h $host $db > $out
done < <(tac "../data/databases.csv")

tac命令会从文件最后一行开始读取内容,这样循环就会先处理db2,再处理db1,输出的文件名顺序自然就颠倒过来了。

情况2:希望调整文件名的结构顺序(比如把db名放在日期前面)

如果你的问题是文件名的组成部分颠倒了(比如当前生成的是.sql_01_23__09_33_27.db1,而你想要db1_2023_01_23__09_33_27.sql这类格式),需要调整变量拼接的顺序:

当前脚本里的文件名拼接逻辑是$db.$NOW.sql,如果想要其他格式,比如用下划线分隔db名和日期,或者把日期放在db名前面,可以修改g变量的赋值:

# 示例:生成 db名_日期.sql 的格式
g="${db}_${f}";
out="${g}.sql"

# 如果你期望回到标准的 db名.日期.sql 格式,确保变量拼接顺序正确即可
g="${db}.${f}";
out="${g}.sql"

如果当前脚本生成的文件名确实是.sql_xxx.db1这种反向格式,大概率是你不小心把out变量的赋值写反了(比如写成了.sql${f}.${db}),修正为${db}.${f}.sql就能恢复正确的文件名结构。

另外建议你在变量赋值时加上大括号(比如${db}),可以避免因特殊字符或变量名混淆导致的意外问题。

内容的提问来源于stack exchange,提问作者khinester

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:17:33