Shell 目录备份和恢复

Shell Directory Backup and Restore

我一直在制作脚本来备份和恢复目录。我想让它变得更好,但我需要一些帮助。

目前我将文件保存为 backup.tgz 我确实在末尾添加了 date 但是当我 运行 恢复功能时我只能让它寻找 backup.tgz 而不是带有日期扩展的备份。有什么办法让它寻找最新的备份吗?或者甚至查找用户输入的备份?

我也曾尝试添加进度条并进行增量备份,但如果有人可以提供帮助,我也没有成功吗?

Tar代码

#!/bin/bash

ROOT="/Users/Rory/Documents"
ROOT_EXCLUDE="--exclude=/dev --exclude=/proc --exclude=/sys --exclude=/temp --exclude=/run --exlucde=/mnt --exlcude=/media --exlude=$
DESTIN="/Users/Rory/BackUps"
BACKUP="backup.tgz"
CREATE="/dev /proc /sys /temp /run /mnt /media "

if [ "$USER" != "root" ]; then
    echo "You are not the root user"
    echo "To use backup please use: sudo backup"
    exit
fi

clear

echo "************************************************"
echo "********* Backup Menu **************************"
echo "************************************************"

OPTIONS="BACKUP RESTORE DESTINATION EXIT"
LIST="1)BACKUP 2)RESTORE 3)DESTINATION 4)EXIT"

select opt in $OPTIONS; do
if [ "$opt" = "EXIT" ]; then
    echo "GOODBYE!"
    sleep 3
    clear
    exit

elif [ "$opt" = "BACKUP" ]; then
    echo "BACKING UP FILES..."
    sleep 2
    tar cvpfz $DESTIN/backup.tgz $ROOT $ROOT_EXCLUDE
    echo "BACKUP COMPLETE"
    sleep 2
    clear
    echo $LIST

elif [ "$opt" = "RESTORE" ]; then
    echo "RESTOTING FILES..."
    sleep 2
    tar xvpfz $DESTIN/$BACKUP -C /Users/Rory/BackUps
    sleep 2
    if [[ -e "/proc" ]]; then
            echo "$CREATE already exists! "
    else
            mkdir $CREATE
            echo "$CREATE are created! "
    fi
    echo "RESTORE COMPLETE..."
    clear
    exit

elif [ "$opt" = "DESTINATION" ]; then
    echo "CURRENT DESTINATION: $DESTIN/backup.tgz "
    echo "TO CHANGE ENTER THE NEW DESTINATION..."
    echo "TO LEAVE IT AS IS JUST PRESS ENTER..."
    read NEW_DESTIN

    #IF GREATER THEN 0 ASSIGN NEW DESTINATION
    if [ ${#NEW_DESTIN} -gt 0 ]; then
            DESTIN = "$NEW_DESTIN"
    fi
    clear

else
    clear
    echo "BAD INPUT!"
    echo "ENTER 1 , 2, 3 or 4.."
    echo $LIST


fi
done

好吧,在您发布的代码片段中,您只是在寻找 backup.tgz。

如果您想选择一个特定的,您可以修改您的脚本以接受一个参数并根据您输入的字符串选择一个。或者...如果您想根据 "how old" 进行操作,您可以按日期对备份文件进行排序,并允许用户选择第 0、1、2 等

您可能想要查看的一件事是 rsync。 rsync 只能复制发生变化的文件。

此外,您还可以使用 rsync = )

启用进度条

rsync -avP /source/path/ /dest/path/

查看手册页了解更多详细信息man rsync

要在还原时启用进度条,您可以解压文件并反向使用 rsync,然后您就会有进度更新=)

如果你想让它成为一个自定义的数字进度条,你可能需要做一些比简单地从 rsync 获取输出更复杂的事情。