2009-10-18 5 views
0

Я абсолютно не знаю, как распаковать созданный архив. Я даю вам полный сценарий. Разбивка на основе Debian под названием Univention использует это для резервного копирования нескольких файлов в tar-архиве.Как извлечь архив из этого скрипта (используя tar)

Реальный архив упакован в функцию. Основное содержанием, где они создают реальный архивный файл является:

cat "$TMPDIR/freeinfo.txt" >> "$TMPDIR/Installinfo.txt" 2>/dev/null 
echo >$TMPDIR/endtag.txt 
echo "%%%%OXBACKUP_${DATE}_HEADER_ENDTAG" >> "$TMPDIR/endtag.txt" 

BACKUPINFO="$BACKUPINFO endtag.txt" 


cat 2>/dev/null <<EOF> "$TMPDIR/Installinfo.sh" 
BACKUPHOSTNAME="$hostname" 
BACKUPDOMAINNAME="$domainname" 
BACKUPBASEDN="$ldap_base" 
BACKUPTIMEZONE="$(cat /etc/timezone)" 
BACKUPLANG="$(echo $locale_default)" 
BACKUPSAMBADOM="$windows_domain" 
BACKUPSAMBAINSTALLED="$SAMBAINSTALLED" 
BACKUPOXINTEGRATIONVERSION="$INTEGRATIONVERSION" 
BACKUPSECLEVEL="$(univention-config-registry get version/security-patchlevel)" 
BACKUPVERSION=2 
SECRETFILES="$SECRETFILES" 
OTHERFILES="$OTHERFILES" 
OXCONFIG="$OXCONFIG" 
CRONTABS="$CRONTABS" 
CERTFILES="$CERTFILES" 
EOF 

pstatus=() 

# 
# the actual backup to stdout 
# 
    sync ; sync ; sync 

RETVAL=$(
(tar cO $BACKUPINFO 2>/dev/null 
tar cO $SECRETFILES 2>/dev/null 
tar cO $OTHERFILES 2>/dev/null 
tar cO $OXCONFIG 2>/dev/null 
tar cO $CRONTABS 2>/dev/null 
tar cO $CERTFILES 2>/dev/null 
[ -f $EXTRAFILES ] && tar --no-recursion -T $EXTRAFILES -cO 2>/dev/null 
tar --no-recursion --null -T dirlist_mailandfilestore -cO 2>/dev/null 
tar --null -T filelist_mailandfilestore -cO 2>/dev/null 
tar --no-recursion --null -T dirlist_shares -cO 2>/dev/null 
tar --null -T filelist_shares -cO 2>/dev/null 
) | 

#help us out with smbclient, perl, scp until we get a working curl 

case "$BACKUPPROTOCOL" in 
##stripped protocol specific stuff ... (*) is the way to go! 

     (*)  dd 2>>${LOGFILE}_${DATE} > ${BACKUPPATH:-$DEFAULTBACKUPPATH}/backup_$DATE && echo "201" 

       chmod 640 "${BACKUPPATH}/backup_$DATE" >/dev/null 2>&1 
       chown root:www-data "${BACKUPPATH}/backup_$DATE" >/dev/null 2>&1 

       if [[ x"$BACKUPPATH" != x && "$BACKUPPATH" != "$DEFAULTBACKUPPATH" ]] ; then 
         # temporary permissions fix 
         ln -sf "${BACKUPPATH}/backup_$DATE" "$DEFAULTBACKUPPATH/" 
       fi 
     ;; 

esac 
) 

в архиве есть 54 ГБ в системе, деготь XVf извлечь только первый уровень архива. Извините трудно объяснить. В целом я получаю только 40 МБ из этого 54 ГБ. Все Dirs, которые должны быть в архиве, не извлекаются.

Использование $ ((деготь ... дегтя ...) | дд> Foo)

также совершенно неизвестный мне, что этот сценарий делает?

Я думаю, что нашел решение самостоятельно (немного обновил скрипт): Сценарий генерирует тег, который знаменует конец первого архива. Я использовал Grep -A1 -a -b "HEADER_ENDTAG" backup.tar Значение было 41247795 дд пропустить = 41247795, если = ../../подпорка = тест

Похоже, теперь я мог извлечь «реальный "архив. Есть ли другой способ автоматического перехода на это смещение байта, например. без использования grep вручную?

+0

Полный сценарий? Вы уверены, что он работает так? tar на debian не работает с параметром «c0». – theomega

+0

есть работы, teste тоже сверху lenny. Попробуйте сами: $ ((tar --null --no-recursion/etc/-cO; tar --null/etc/-cO) | dd> foo) И попробуйте извлечь полный текст и т. Д. Нет, скрипт не завершен , Shoul я пишу полную вещь? – evildead

+0

Забудьте свой комментарий (но см. Мой ответ), я взял O (письмо) для 0 (число, ноль). – theomega

ответ

1

Ваш скрипт объединяет несколько файлов tar в один большой файл. Чтобы извлечь один раздел, я использую оболочки функция/скрипт так:

tarsection Файл:

#!/bin/sh 
tar_section() { 
    local x=1; 
    while [ $x -lt $1 ]; do 
     tar t > /dev/null || echo "Error in section $x" >&2 
     x=$(($x+1)) 
    done 
    shift 
    tar f - "[email protected]" 
} 

tarfile="$1" 
shift 
tar_section "[email protected]" < "$tarfile" 

Затем вы можете сделать (например, для части 3 большого файла):

tarsection YOUR_54GB_BACKUP_FILE 3 -t | less 
cd ...extractlocation 
tarsection YOUR_54GB_BACKUP_FILE 3 -x 
+0

thats it. Большое спасибо! – evildead