Создание инкрементного архива tar

Инкрементный архив с помощью 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.

Источник
Примечание: указанные тут флаги отсутствуют в bsdtar(1), который по умолчанию имеется в base freebsd.
Но ничего не мешает установить из портов гнутый:
archivers/gtar GNU version of the traditional tape archiver

Опубликовано 11.04.2010 в 22:53 · Автор MIkhail Timofeev · Ссылка
Рубрики: freeBSD, Linux