备份工具
实现一个特殊的备份工具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节 字符串操作
代码部分:
#!/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}"