Как периодически создавать резервные копии папок при изменении?

Я хочу добиться следующей функциональности в Ubuntu, но я не знаю, как это сделать.

Мне нужен демон, который периодически выполняет резервное копирование каталога, например, dir в другое место, выполняя следующие действия:

  1. проверяет наличие последнего каталога в месте резервного копирования.
    1. Если не найден, создайте резервную копию каталога dir и переименуйте его с меткой времени в нечто вроде этого: dir_timestamp.
    2. Если найдено, проверяется любое изменение содержимого между dir и dir_timestamp.
      • Если есть изменение, создайте резервную копию каталога с новой отметкой времени.
      • Если нет, ничего не делайте
  2. дождитесь указанного периода
  3. вернитесь к 1.

Я вроде получил алгоритм, но я не знаю, как это сделать, потому что я понятия не имею о сценариях оболочки. если это можно сделать, это будет очень полезно для моих исследований. Кто-нибудь может мне помочь?

3
задан 1 August 2014 в 12:50

1 ответ

NB: я не протестировал это, потому что я делаю свои резервные копии по-другому. Однако я думаю , что это будет работать.

Редактирование:

#! /bin/bash

newestfile=$(ls /backup/location -td | head -1)

budate=$(newestfile| cut -c10-19)
cdate=$(date --iso)

# Check if there is a backup done today
if [ $cdate = $budate ]; then

    # inform user that it is checking for changes.
    echo "Backup done today, checking for changes."
    notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Checking for changes"

    # get the exit code of the diff command (1 = changes, 0 = no changes)
    diffexit=$(diff /home/<USER>/dir/to/backup /backup/location/backup-$(date +%Y-%m-%d-%H:%M)-<chosendirname> && $?)

    # if there are no changes tell the user
    if [$diffexit = 0 ]; then
        echo "Backup complete, no changes"
        notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Backup complete, no changes"
    else
    # if there are changes, tell the user
        echo "Propagating changes"
        notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Propagating changes"
        # copy it acros
        cp -ar /home/<USER>/dir/to/backup /backup/location/backup-$(date +%Y-%m-%d-%H:%M)-<chosendirname>
        # Tell the user it is finished
        echo "Backup complete, finished propagating changes"
        notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Backup complete, finished all changes"
    fi

# if there wasn"t a folder with the current date.
else
    # Tell the user it is starting
    echo "Starting backup"
    notify-send --expire-time=60000 -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Starting backup for today."
    # copy it across.
    cp -ar /home/<USER>/dir/to/backup /backup/location/backup-$(date +%Y-%m-%d-%H:%M)-<chosendirname>
    # tell the user it has finished
    echo "Finished backup for today."
    notify-send --expire-time=60000 -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Finished backup for today."
fi

# sleep 3 mins
sleep 500

# run itself
/home/<USER>/./script.sh

Старый код, не как хороший:

    #! /bin/bash

    newestfile=$(ls /backup/location -td | head -1)

    budate=`echo $newestfile| cut -c10-19`
    cdate=$(date --iso)

    if [ $cdate = $budate ]; then
        echo "Backup Done today, checking for changes."
        notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Checking for changes"

    dirls=$(ls /home/<USER>/dir/to/backup)
    dirbuls=$(ls /backup/location/$(newestfile))

    if [$dirls = $dirbuls ]; then
        notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Backup complete, no changes"
    else
        notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Propagating changes"
        cp -ar /home/<USER>/dir/to/backup /backup/location/backup-$(date +%Y-%m-%d-%H:%M)-<chosendirname>
        notify-send -i /home/<USER>/Pictures/Logos/safe.png "Backup Status" "Backup complete, finished all changes"
    fi

else
    echo "Starting backup"
    notify-send --expire-time=60000 -i /home/<USER>/Pictures/Logos/safe.png 'Backup Status' 'Starting backup for today.'

    cp -ar /home/<USER>/dir/to/backup /backup/location/backup-$(date +%Y-%m-%d-%H:%M)-<chosendirname>


    notify-send --expire-time=60000 -i /home/<USER>/Pictures/Logos/safe.png 'Backup Status' 'Finished backup for today.'
fi
1
ответ дан 1 August 2014 в 12:50

Другие вопросы по тегам:

Похожие вопросы: