递归备份/恢复bash脚本



关于可以做以下事情的备份/恢复脚本有什么想法吗?

递归地将文件和目录备份/恢复到/从存档中,并为每个目录显示是否要备份/恢复的提示。例如,假设我们有以下文件和目录:

base path: /home/me/Downloads/test    
dir: /home/me/Downloads/test/1    
dir: /home/me/Downloads/test/1/1a    
file: /home/me/Downloads/test/1/filein1    
dir: /home/me/Downloads/test/2    
dir: /home/me/Downloads/test/3   
dir: /home/me/Downloads/test/4    
file: /home/me/Downloads/test/4/filein4    
file: /home/me/Downloads/test/backup.sh    
file: /home/me/Downloads/test/get_dirs_files.sh    
file: /home/me/Downloads/test/restore.sh    
file: /home/me/Downloads/test/script.sh    

脚本应该备份所有的文件和目录,但是应该对每个目录提示yes/no,而不是树中的文件。

我正在尝试这个:

#!/bin/bash
get_dirs= eval "find . -type d -exec echo "{}" ;"
echo $get_dirs
echo "|  BACKUP YOUR SYSTEM: "
OPTIONS="Backup Exit"
LIST="1) Backup 2) Exit" 
select opt in $OPTIONS; do
if [ "$opt" = "Exit" ]; then
    clear
    exit
elif [ "$opt" = "Backup" ]; then
    tar jcvpfw /backup.tar.bz2 $get_dirs
    echo "BACKUP COMPLETE"
    exit
else
    clear
    echo "| BAD OPTION! Select 1 or 2"
    echo "|--------------------------------------------------------------"
    echo "|  BACKUP YOUR SYSTEM: "
    echo $LIST
fi
done

因为我可以通过find . -type d -exec echo "{}" ;

得到所有的dir

和交互式存档与w选项的tar,这并不完全备份当前目录下的所有文件。

您可以尝试这样做:

#/bin/bash
default_path=/home/user # or something else
if [[ -z ${1} ]]; then
    backup_path=${default_path}
else
    backup_path=${1} # sets if script got an argument with backup path
fi
all_dirs=`find ${backup_path} -type d`
backup_list=""
for dir in `echo ${all_dirs}`; do
    echo "${dir} [y/n/skip]: "
    read answer
    if [[ ${answer} == "y" ]]; then
        backup_list="`echo ${backup_list}` ${dir}"
    fi
    if [[ ${answer} == "skip" ]]; then
        break
    fi
done
tar -czpf backupfile.tar.gz ${backup_list}
exit 0

我认为即使没有注释,代码也很简单。这不是解决整个任务的方法,但您可以使用这个想法。

最新更新