Как заставить tar создать индекс для многотомного архива?

Я использую GNU tar для создания многотомных архивов:

DIR=~/temp
BLOCKSIZE=500M
tar cMf multi-0001.tar --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR

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

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

(Для справки, содержимое volume-script.sh следующее; я не думаю, что это имеет отношение к вопросу

#! /bin/bash
echo multi-$(printf "%04d" $TAR_VOLUME).tar >&$TAR_FD

)

EDIT: Вопрос снят

Этот вопрос содержит ложное предположение. В ответе на этот последующий вопрос подтверждается, что --list является вполне приемлемым способом создания индексных файлов на искомых носителях. Теперь мое решение выглядит следующим образом:

DIR=~/temp
BLOCKSIZE=500M
tar cMf multi-0001.tar --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR

for i in *.tar;
 do echo q | tar --list -M -f $i --verbose --verbose > $i.index.txt 2>/dev/null;
done

0
13.04.2017, 15:36
2 ответа

Это может быть простой способ, который я упускаю из виду, но я думаю, что вы можете заставить свой скрипт тома извлекать новые имена из подробных выходных данных индекса. Примерно так (непроверено):

export templisting=$(mktemp)
export tempoffset=$(mktemp)
DIR=~/temp
BLOCKSIZE=500M
tar cvMf multi-0001.tar --index-file=$templisting --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR
rm $templisting $tempoffset

В volume-script.sh (использует logtail, можно обойтись без):

#! /bin/bash
echo multi-$(printf "%04d" $TAR_VOLUME).tar >&$TAR_FD
listingfile= #however you want to name listing files.
logtail -f$templisting -o$tempoffset > $listingfile
0
28.01.2020, 02:47

Я думаю, что вы просите просто: tar tvf filename

Это создает список того, что находится в tar-файл, не открывая его. Вам придется запустить его после создания tar-архива, но он должен дать вам то, что вам нужно.

Вы можете просто связать это с задней частью вашей команды tar, выполнив следующие действия: tar cMf multi-0001.tar --new-volume-script = volume-script.sh --tape -length = $ BLOCKSIZE $ DIR; tar tvf multi-0001.tar> multi-001 -isting.txt

1
28.01.2020, 02:47

Теги

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