Linux作业 实现一个特殊的备份工具bak
实现一个特殊的备份工具bak
1. 备份命令格式:bak dir1 dir2
功能:
将dir1中的所有文件(含子目录中的文件)备份到dir2目录,且将所有子目录以“-”连接
例
dir1/a/b/c文件将备份为dir2/a-b-c
2. 恢复命令格式:bak -x dir1 dir2
功能:将dir1中的所有文件恢复到dir2目录,并还原备份前的目录结构
例如,bak -x dir2 dir3,将原备份的文件恢复到一个新的目录dir3
程序代码及注释
#!/bin/bash
# 如果参数个数为2一下, 直接退出脚本,
if [ $# -lt 2 ]; then exit 1
fi
# 定义变量
string=""
current_parent_dir_name=""
flag=0
slash="/"
option="-x"
a="-"
# 不为还原选项
if [ ! $1 = $option ]; then parent_dir_name=$1 ls -R $1 | while read line; do
# echo "读入的是:$line" # 获取父目录名字 if [ $flag -eq 0 ]; then flag=1 length=${#line} let length_1=$length-1 current_parent_dir_name=${line:0:$length_1}
# echo "当前父目录名字:$current_parent_dir_name" else file_name="$current_parent_dir_name$slash$line"
# echo "文件名:$file_name" # 如果是普通文件 if [ -f $file_name ]; then
# echo "普通文件, line=$line" # echo "当前父目录名字:$current_parent_dir_name" for (( i=0; i<${#current_parent_dir_name}; i++)); do char=${current_parent_dir_name:$i:1} if [ $char = $slash ]; then char="-" fi string=${string}${char} done
# echo "当前父目录名字:=$current_parent_dir_name 拼接后父目录名字:$string" # 主目录下面拷贝过去, 直接拷贝 if [ $parent_dir_name = $string ]; then string="$2$slash$line" # echo "string=$string" cp $file_name $string # 子目录拷贝过去, 文件名改变 else # 除去主目录的名称
# echo "主目录的名称:$parent_dir_name, 长度:${#parent_dir_name}"
# echo "前:$string" string=${string:${#parent_dir_name}+1:${#string}}
# echo "后:$string" # 目录名-文件名 string="${string}${a}${line}" # 拷贝目录名 / 拷过去要改的名字 string="$2$slash$string"
# echo "cp $file_name $string" cp $file_name $string fi # 如果是空 "" elif [ ${#line} -eq 0 ]; then flag=0 # echo "flag置换" fi string="" fi done
# 还原选项
elif [ $1 = $option ]; then parent_dir_name=$3 index=0 ls $2 | while read line; do # 遍历文件名, 找出目录和文件名
# echo "参数长度:${#line}" for(( i=0; i<${#line}; i++)); do char=${line:$i:1}
# echo "char=$char" if [ $char = $a ]; then array[$index]=$string
# echo "array[$index]=${array[$index]}" let index=$index+1 string="" else string="$string$char" fi done array[$index]=$string
# echo "array[$index]=${array[$index]}" file_name=${array[$index]} string="" for (( i=0; i<$index; i++)); do let s=$i-1 # 拼接成要还原的目录下的路径 if [ $i -eq 0 ]; then string=$parent_dir_name$slash${array[$i]} else
# echo "前: $string" string=$string$slash${array[$i]}
# echo "后: $string" fi
# echo "路径:$string" # 目录不存在就创建 if [ ! -d $string ]; then
# echo "mkdir $string" mkdir $string fi let j=$i+1
# echo "j=$j, index=$index" # 当前目录是最后一级目录 if [ ! $j -lt $index ]; then # 除去文件前缀 length=0 for (( i=0; i<$index; i++)); do if [ $i -eq 0 ]; then let length=${#array[$i]}+length else let length=${#array[$i]}+length let length=$length+1 fi done
# echo "length=$length" let length=$length+1 r=${line:$length:${#line}}
# echo "r=$r" line=$2$slash$line string=$string$slash$r echo "cp $line $string" cp $line $string fi done if [ $index -eq 0 ]; then line=$2$slash$line
# echo "cp $line $parent_dir_name$slash" cp $line $parent_dir_name$slash fi string="" index=0 done
fi
Linux作业 实现一个特殊的备份工具bak相关推荐
- 【Linux】Rsync远程同步及备份工具(Rsync简介、Rsync安装、rsync认证方式)
一.Rsync简介 rsync(Remote synchronization)是Liunx/Unix下的一个远程数据同步工具. 它可通过LAN/WAN(局域网/广域网)快速同步多台主机间的文件和目录, ...
- linux备份工具比较,2020年Linux最好的5个备份工具
在本文中,我们将介绍可在Linux服务器或系统上使用的5个出色的备份工具. CloudBerry Backup CloudBerry Backup for Linux是一个跨平台的云备份解决方案,有高 ...
- 手机 linux 备份软件有哪些,八款免费Linux备份工具汇总(附下载)
[IT168 导购]据国外媒体报道,用户常常会因为某种原因而丢失重要的数据,这会导致用户时间甚至金钱上的损失.针对这种情况,市场中先后出现了很多的Linux备份工具. 目前,大多数的备份工具还提供压缩 ...
- linux增量备份目录,linux下的增量备份工具rsnapshot介绍
本人一直在用群晖上的 Timebackup 插件,对群晖里面的资料进行定时备份(把某个时间点的状态保存下来,以备将来查询的需要),觉得非常方便,我用了几年了,无奈官方现在逐渐放弃了对 Timeback ...
- linux 监控微信通知,一个 Linux 下基于 Bash 的文件和数据库监控及备份工具,可发送微信报警通知...
shellMonitor 一个 Linux 下基于 bash 的文件和数据库监控及备份工具. 写这个工具的原因,在于一个朋友的一个小电商网站,因为未明原因被黑了,总是会被增加超级管理员,并将收款账号改 ...
- 四大Linux备份工具比较与操作实例
标准的UNIX系统皆有提供基本的备份工具,不同的备份工具有不同的差异.dump,cpio,tar及dd,dump及restore通常是最好的选择.其次是cpio,但是它比tar来的不亲和些:tar则比 ...
- Linux下的数据备份工具rsync
Linux下的数据备份工具很多,用得最多的是rsyns(远程同步) 同步远程数据类似scp 同步本地数据类似cp root@ip-172-31-8-212:~# rsync /etc/passwd / ...
- 超全Linux备份工具集合,满足你的所有需要!
经常备份计算机上的数据是个好的做法,它可以手动完成,也可以设置成自动执行.许多备份工具拥有不同的功能特性,让用户可以配置备份类型.备份时间.备份对象.将备份活动记入日志及执行更多操作. 1.Rsync ...
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
1.什么是 Rsync? Rsync 是一个开源的快速备份工具,是Linux和UNIX操作系统默认安装的组件之一,可在不同主机间镜像同步整个目录,并支持增量备份文件传输,保持链接和权限,采用优化的同步 ...
最新文章
- 题目1460:Oil Deposit
- Visual Studio UML Use Case Diagram(2)
- GitHub告急!黑客威胁程序员不交钱就删库
- apache与tomcat的联系
- glacier2_Amazon Glacier的Scala客户端
- Cocos2dx实现象棋之布局
- windows消息宏(转)
- Sublime text 3 快捷键
- ios开发错误之: Undefined symbols for architecture x86_64
- 宿主机无法访问docker容器的坑
- 思科下一代模拟器EVE-NG安装
- 树莓派机器视觉环境搭建
- win10系统steam连接不上服务器,win10系统steam无法连接到更新服务器的解决方法
- c# 解决:Panel 添加自定义控件后滚动条跳动问题
- doc命令大全(经典收藏)
- css样式的叠加,CSS的叠加
- 配置FCKeditor出现严重问题,调试时报错:
- 腰椎间盘突出,睡硬床垫还是软床垫好?听骨科医生答疑
- 怎么把PDF转网页HTML?建议收藏这些方法
- 基于neo4j知识图谱的旅游景点问答辅助系统
热门文章
- 假如我年少有为不自卑
- 网络数据帧中的(Jumbo Frame)巨帧、超长帧
- 优化PyTorch性能的一些trick
- Kibana查询语言(KQL)AND、OR匹配,模糊匹配
- 【系统分析师之路】2017年系统分析师上午综合知识历年真题
- mytrader-开源股票期货金融软件+支持C/C++/Python/Excel/VBA/麦语言的量化分析交易平台
- macbook 安装iperf_【优秀的网络性能测量工具----Iperf】-Linux/Unix/MAC OSX操作系统论坛-ZOL中关村在线...
- TyoeScript
- 详细记录丨公众号如何通过迁移开通留言功能?
- 游戏服务器和网站,大型网络游戏和大型网站需要服务器的不同