В самом простом виде инкрементальный архив с помощью tar делается так: tar --create --file=`date +%s`.tbz2 --bzip --listed-incremental=example.snar --verbose example/
Кратко:
tar -cvjg example.snar -f `date +%s`.tbz2 example/
Развертывается архив через распаковку всех составляющих архивов по очереди, от самых старых к самым новым.
В простейшем случае так:
tar --extract --incremental --file level0.tar
tar --extract --incremental --file level1.tar
tar --extract --incremental --file level2.tar
Или, например, так:
for i in *.tbz2; do tar -xjGf "$i"; done;
При использовании следующего скрипта, архив нулевого уровня будет создаваться раз в неделю или раз в месяц, в зависимости от того какая строка раскомментирована:
#!/bin/sh
SOURCE="$1"
test -d "$SOURCE" || exit 1
DEST_DIR=`date +%G-%V`; #weekly
#DEST_DIR=`date +%Y-%m`; #monthly
#DEST_DIR=`date +%Y`-$(( (`date +%m`-1)/3+1 )); #quarterly
mkdir -p $DEST_DIR;
shift;
tar --create "$@" --preserve-permissions --totals --bzip \
--file="$DEST_DIR"/`date +%F-%s`.tbz2 \
--listed-incremental="$DEST_DIR"/backup.snar \
--no-check-device --exclude-vcs \
--exclude-tag-under=access.log --exclude='*.log' \
--exclude-caches --exclude-tag-under=IGNORE.TAG "$SOURCE"
Проверить работу этого скрипта можно, например, так:
./backup.sh example/ -v
Для некоторых версий tar наблюдается крах при одновременном использовании --exclude-caches и --exclude-tag=, в этом случае --exclude-caches можно заменить на --exclude-tag=CACHEDIR.TAG.
URL: http://sanmai.livejournal.com/780770.html http://www.gnu.org/software/automake/manual/tar/Incremental-...
Обсуждается: http://www.opennet.me/tips/info/2341.shtml