有关可执行以下操作的备份/恢复脚本的任何想法:
以递归方式备份/恢复文件和目录的脚本,显示每个目录的提示是否要进行备份/恢复。 例如,假设我们有以下文件和目录:
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
脚本应该备份所有文件和目录,但是应该为每个目录提示我们是/否,而不是树中的文件。
我正在尝试这个:
#!/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 "{}" \;
并且还使用tar的w选项进行交互式存档,但这并不能完全备份当前目录中的所有文件。
答案 0 :(得分:0)
您可以尝试这样的事情:
#/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
我认为即使没有评论,代码也非常简单。它不是整个任务的解决方案,但你可以使用这个想法。