关于可以做以下事情的备份/恢复脚本有什么想法吗?
递归地将文件和目录备份/恢复到/从存档中,并为每个目录显示是否要备份/恢复的提示。例如,假设我们有以下文件和目录:
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 "{}" ;
和交互式存档与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
我认为即使没有注释,代码也很简单。这不是解决整个任务的方法,但您可以使用这个想法。