关键词:
【中文标题】备份系统的shell脚本[关闭]【英文标题】:shell script to backup system [closed] 【发布时间】:2017-06-30 01:23:55 【问题描述】:我正在使用以下格式将备份文件保存在文件中 backup#01.tar.gz ,backup#02.tar.gz 等。 但现在我需要循环备份目录以找到最大的数字并将下一个文件增量命名为它例如:backup#03.tar.gz 有什么帮助吗?
【问题讨论】:
确实可以做你想做的事,但是如何使用包含可排序格式的时间戳的文件(例如 YYYY-MM-DD_HHhMM)?这将回避问题并在文件名中提供其他信息。 【参考方案1】:这是一个不需要子shell 或外部程序的解决方案,不解析ls
输出(不推荐),并且应该使用包含空格(甚至换行符)的文件名。您可以自定义前缀和扩展名。
#!/bin/bash
dir="/path/to/files"
prefix="backup#"
ext=".tar.gz"
max=1
for file in "$dir/$prefix"*
do
[[ $file =~ /$prefix([0-9]+)$ext$ ]] || continue
n="$BASH_REMATCH[1]"
[[ $max -gt $n ]] || max=$((n+1))
done
printf -v newfilename "$prefix%04d$ext" "$max"
【讨论】:
当前的printf
表达式填充到 4 (backup#0001.tar.gz)
的长度,而 OP 要求填充到 2。
我其实是把它从2改成了4,觉得这样会更好(超过命名格式之前99个备份好像不是很多)。 %02
而不是 %04
会将其恢复为 2 位数。匹配不会以任何特定长度阻塞,并且数字比较将忽略前导零,因此这只是一个表面问题,并且命名将继续正常超出printf
格式字符串中的位数。
谢谢它的工作【参考方案2】:
有几种方法可以做到这一点,当然,我将简单地假设您的脚本将以某种方式从这些备份所在的目录运行,否则只需调整。
#!/bin/bash
for filename in `ls backup*tar.gz -r -1`; do
echo "Last backup file found is $filename"
last=`expr $filename[@]:7:2`
next=`expr $last + 1`
newname=`printf "backup#%02d.tar.gz" $next`
echo "Next backup file should be $newname"
break # important!!!
done
我写它是为了不言自明,所以我确信有更有效或更紧凑的方法可以做到这一点,但这应该有助于您在更宏大的计划中适应/插入它。
所以,总结一下操作:
倒序列出文件夹中匹配“backup*tar.gz”的所有文件 为文件名指定一个此类文件的名称。第一个将是我们最新的现有备份。 结合使用expr和数组操作提取数字并转换为整数,表示最后一个备份数字 使用 expr 将此类整数值加一 使用 printf 格式化新的备份文件名,包括填充 重要打破循环,因为我们已经知道这个循环中的第一个文件是最新的备份文件,所以我们可以退出。当然,您可以更改获取文件名的方式。
数组操作可以方便地应用于 bash 中的字符串,请查看http://tldp.org/LDP/abs/html/arrays.html
编辑:在@Fred 的宝贵输入之后,虽然坚持使用ls
为我对文件进行排序,但以下不会产生那么多子shell,它使用 bash 自己的算术和来自@ 的非常有用的-v
选项987654326@:
#!/bin/bash
for filename in `ls backup*tar.gz -r -1`; do
echo "Last backup file found is $filename"
last="$filename[@]:7:2"
printf -v newname "backup#%02d.tar.gz" $((last+1))
echo "Next backup file should be $newname"
break # important!!!
done
【讨论】:
不推荐解析ls
输出(mywiki.wooledge.org/ParsingLs)。如果只需要第一行输出(使用read
和进程替换<()
),则不需要循环。您还启动了许多子shell:虽然没有错,但没有必要,因为您可以使用 shell 算法、printf 的 -v
选项、shell 扩展/匹配。
@Fred 很棒的补充。考虑到 OP 有一个固定的命名方案,采用非常受控的 ls
解析应该不会像最一般的情况那么糟糕。 Shell 算术绝对是我将添加到我的答案中的东西,以及新的我建议-v
选项到printf
。谢谢!
非常感谢您的帮助linux系统shell脚本之mysql备份(代码片段)
Linux系统shell脚本之mysql备份一、脚本要求二、脚本内容三、脚本执行结果一、脚本要求1.备份/var/lib/mysql的内容2.备份mysql数据库全部内容3.单独备份mysql内每个数据库二、脚本内容[root@192scripts]#cat./mysql_bak.sh#!/bin/bash################... 查看详情
linux系统shell脚本之定期清理备份文件(代码片段)
Linux系统shell脚本之定期清理备份文件一、脚本要求二、脚本内容一、脚本要求1.在/backup/mysql的备份目录下,定期清理备份文件2.清理频率为30天执行清理一次3.清理脚本每一周清理一次二、脚本内容[root@192scripts]#catdel_mysql.s... 查看详情
shell脚本怎么实现日志备份到本地linux系统
参考技术A把日志打包,压缩,拉取到本地 参考技术B#/bin/bashtoday=`date+%Y-%m-%d`dockercpf127da2a269f:/usr/local/tomcat_8.0/logs/stp.test.simpletour.com_access_log..$today.txt/data/docker-logs/这里就可以实现本地cpdocker的今天usr/local/tomcat_8.0/logs/下的指定的txt... 查看详情
debian脚本执行异常
...法如下:在开发过程中,经常会使用shell脚本去完成定时备份的任务,普遍的做法是通过系统的定时任务定时执行备份脚本。设想这样一种场景,本次备份时间到了,自动执行备份脚本,如果备份比较耗时的话,会一直持续到下... 查看详情
用shell脚本自动化备份数据库
防伪码:防止误删系统数据库,定时备份你我更安心! 使用shell脚本自动化备份数据库一、简介系统数据库如图所示(以MySQL5.5为例)650)this.width=650;"src="http://s2.51cto.com/wyfs02/M00/87/... 查看详情
用于数据库备份的 Linux shell 脚本
】用于数据库备份的Linuxshell脚本【英文标题】:Linuxshellscriptfordatabasebackup【发布时间】:2013-11-0900:02:42【问题描述】:我尝试了许多用于数据库备份的脚本,但我做不到。我想每小时备份一次我的数据库。我将文件添加到“/etc/... 查看详情
mysqldump自动备份数据库shell脚本(代码片段)
文章目录MySqlDUMP自动备份数据库Shell脚本MySqlDUMP自动备份数据库Shell脚本MySqlDUMP自动备份数据库Shell脚本MySqlDUMP自动备份数据库Shell脚本MySqlDUMP自动备份数据库Shell脚本#!/bin/bashPATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbinexportP... 查看详情
sh用于备份和从awss3删除旧备份的简单脚本shell(代码片段)
常见的一些shell脚本书写,定时删除,压缩备份(代码片段)
删除与备份videoportal日志 写执行删除过期日志的shell脚本 以下参考文档:https://blog.csdn.net/yuan882696yan/article/details/77885339 执行删除/home/test/REPORT/send/videoportal23890234823904.txt这个目录下文档(当前是保留五天日志) 查看详情
shell脚本:mysql全备与binlog增量备份
脚本功能:mysql库备份脚本,全备与binlog日志备份 脚本可以根据指定的参数进行全备,其余时间备份binlog日志---------------#!/bin/bash# description:Trian Server backup databases# revision on  查看详情
rocky基础-shell脚本基础知识
...常性的,重复性的,非交互式的运维工作,如:文件打包压缩备份,监控系统运行状态并实现告警等1-2、shell脚本基本结构shell脚本编程:是基于过程式、解释执行的语言编程语言的基本结构:各种系统命令的组合数据存储:变量、数组... 查看详情
mysql自动备份可通用shell脚本
最近在整理服务器的脚本,发现以前写的MySQL每天自动备份脚本写的不太好,就重新写了一个:#!/bin/bash####目录环境的配置####exportdatetime=`date+"%Y%m%d"`exportmysqlbin_dir="/usr/local/mysql/bin"exportdatadir="`$mysqlbin_dir/mysql-hlocalhost-uroot-A-Bse 查看详情
mysql自动备份可通用shell脚本
最近在整理服务器的脚本,发现以前写的MySQL每天自动备份脚本写的不太好,就重新写了一个:#!/bin/bash####目录环境的配置####exportdatetime=`date+"%Y%m%d"`exportmysqlbin_dir="/usr/local/mysql/bin"exportdatadir="`$mysqlbin_dir/mysql-hlocalhost-uroot-A-Bse 查看详情
hillstone防火墙备份脚本
Hillstone防火墙备份脚本 对于公司有多台防火墙备份的需求,为减轻工作量对多台物理防火墙进行自动备份(不限于防火墙,支持路由交换与安全等其他产品),本篇文章使用Linux系统shell脚本编写Hillstone自动化备份防火... 查看详情
mysql备份恢复方案都有哪些,全备,热备该怎么做
参考技术A方案一:mysqldump全备份+日志增量备份1,mysqldump备份方案:周一凌晨3点全备周二到周日凌晨3点增量备份2,备份步骤(1)创建备份目录,备份脚本存放目录Shell>mkdir/usr/mysqlbackup;Shell>chmod755/usr/mysqlbackup;Shell>mkdir/usr/mys... 查看详情
sh用于备份组织的所有github存储库的shell脚本(代码片段)
linux中shell脚本:是root用户可以通过atdstart或者crondstart启动系统服务而不是service命令。
...好当地时间输出保存到/aa/log目录中3.每天23:55将/aa/log压缩备份到?/var/log参考技术A很简单的脚本,自己翻翻书完全可以自己写。给你点思路,先写一个搜集cpu负载内存呢交换空间、磁盘空间用户登录情况的脚本。并输出到/aa/log... 查看详情
iptables的备份及脚本构成
在Linux中,iptables为我们提供了批量备份与恢复规则的命令,防火墙脚本实际上是一个shell脚本程序,便于使用shell变量、程序控制逻辑,在需要重用、移植使用时会非常方便,只需修改下变量值就可使用iptables的备份及... 查看详情