我将备份文件保存在一个文件中,使用以下格式备份#01.tar.gz,备份#02.tar.gz等。 但现在我需要循环备份目录找到最大的数字并命名下一个文件增量到它:备份#03.tar.gz 任何帮助吗?shell脚本备份系统
-7
A
回答
3
这是一种不需要子shell或外部程序的解决方案,母鹿s不解析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"
0
有几种方法可以做到这一点,当然,我将简单地假设您的脚本将以某种方式从这些备份所在的目录运行,否则只需进行调整。
#!/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
我写这样的,这是自我解释,所以我肯定有更有效或紧凑的方式做同样的,但这应该帮助你适应/在你穷的东西方案插入。
所以,总结一下操作:按相反的顺序
- 列表中的文件夹匹配的“备份* tar.gz的”
- 所有文件分配名的一个这样的文件名。第一个将是我们最新的现有备份。
- 使用EXPR和阵列操作的组合来提取的数目和转换为整数,其表示上次备份数
- 增加这样的整数值由一个与EXPR
- 使用的printf格式化新的备份文件名,包括填充
- 重要打破循环,因为我们已经知道这个循环中的第一个文件是最新的备份文件,所以我们可以退出。
当然,您可以更改文件名的获取方式。
有关数组操作可以很方便地应用到在bash字符串参考,检查http://tldp.org/LDP/abs/html/arrays.html
编辑:后@弗雷德的宝贵意见,同时使用ls
排序的文件对我来说,下面没有按粘“T产卵多达子shell,它使用bash的自己的算法,并从printf
相当有用-v
选项:
#!/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
相关问题
- 1. 如何搭配linux shell备份脚本系统?
- 2. shell脚本在ubuntu上删除备份
- 3. shell备份脚本重命名
- 4. shell脚本备份源目录备份目录
- 5. 准备shell脚本
- 6. Bash备份脚本
- 7. Unix备份脚本
- 8. 只备份public_html的PHP备份脚本
- 9. 样本备份脚本
- 10. Linux的shell脚本 - 备份/恢复的#1
- 11. 用于删除早于2周的备份的Shell脚本
- 12. 备份文件脚本
- 13. 路由器备份脚本
- 14. Python中的备份脚本
- 15. Windows增量备份脚本
- 16. MongoDB的备份脚本
- 17. PHP递归备份脚本
- 18. 备份脚本 - 递归
- 19. 简单备份脚本
- 20. PowerShell脚本备份SQL,SVN
- 21. LINQ to SQL备份脚本
- 22. 备份Derby DB Groovy脚本
- 23. PHP备份脚本超时
- 24. 备份bash脚本解释
- 25. 用户友好的备份系统 - 自动添加脚本到crontable
- 26. 备份Android操作系统的细节
- 27. 为MySQL推荐的热备份系统?
- 28. shell脚本:在并行化bash脚本的命令下,Ubuntu Linux操作系统
- 29. Shell脚本知道文件系统是否已经安装
- 30. 如何使普通shell脚本不依赖于系统
这肯定是可以做到你想要什么,但如何使用包含在可排序格式的时间戳的文件(如YYYY-MM-DD_HHhMM)?这将回避问题并提供文件名中的其他信息。 – Fred