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
相关产品推荐
相关产品推荐

