Como posso obter o tar para criar um índice para um arquivo de vários volumes?

0

Estou usando o GNU tar para criar arquivos de vários volumes:

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

Eu quero criar uma listagem de arquivos que mostre o conteúdo de cada volume. Eu tentei adicionar várias opções --verbose , e enquanto isso me dá uma lista de todos os arquivos que estão sendo arquivados, ele não me diz em qual volume eles estão.

Estou ciente de que poderia executar cada volume pelo tar novamente usando o comando --list , mas preferiria evitar processar todos os meus dados duas vezes.

(para referência, o conteúdo de volume-script.sh é o seguinte; não acredito que seja relevante para a pergunta

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

EDIT: Pergunta retirada

Esta questão contém uma suposição falsa. Está confirmado na resposta a esta pergunta de acompanhamento que --list é perfeitamente aceitável maneira de criar arquivos de índice em mídia pesquisável. Minha solução agora é assim:

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
    
por jl6 01.09.2016 / 00:22

2 respostas

1

Acho que o que você está pedindo é apenas:       tar tvf filename

Isso cria uma lista do que está no arquivo tar sem abri-lo. Você terá que executá-lo depois de criar o arquivo tar, mas ele deve fornecer o que você precisa.

Você pode simplesmente encadear isso na parte de trás do seu comando tar fazendo isso: tar cMf multi-0001.tar --new-volume-script=volume-script.sh --tape-length=$BLOCKSIZE $DIR ; tar tvf multi-0001.tar > multi-001-listing.txt

    
por 01.09.2016 / 00:46
0

Pode haver uma maneira simples de fazer isso que estou ignorando, mas acho que você pode ter seu script de volume extrair os novos nomes da saída de índice detalhada. Algo parecido com isto (não testado):

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

Em volume-script.sh (usa o logtail, pode ser feito sem):

#! /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
    
por 01.09.2016 / 00:56

Tags