Linux作业

备份工具

班级: 计算机xxxx   学号: xxxxxxxxxxxxxxx   姓名: xxx

实现一个特殊的备份工具bak(即创建bak.sh)

(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

请以附件中dic.tar为例(dic.tar需先解包)进行验证。

附:34.1.4节 字符串操作

img

img

img

代码部分:

#!/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                                       	
	 # 获取父目录名字                     
	 if [ $flag -eq 0 ]; then                           
	 	flag=1                                    
	 	length=${
   #line}                          
	 	let length_1=$length-1                              
	 	current_parent_dir_name=${line:0:$length_1}                 
	 else                                            
	 	file_name="$current_parent_dir_name$slash$line"                 
	 	# 如果是普通文件                        
	 	if [ -f $file_name ]; then          
	 		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                                          
	 		# 主目录下面拷贝过去, 直接拷贝                 
	 		if [ $parent_dir_name = $string ]; then      
	 			string="$2$slash$line" 
	 			cp $file_name $string      
	 			# 子目录拷贝过去, 文件名改变                    
	 		else                                          
	 		# 除去主目录的名称               
				string=${string:${
   #parent_dir_name}+1:${
   #string}}                               	
				# 目录名-文件名                        
				string="${string}${a}${line}"                      
				
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值