Como faço para retomar um comando tar que foi morto

11

Eu estava fazendo um: tar -cvfe eu tive que matá-lo com ctrl-C. Eu sei que deveria ter feito um Ctrl-Ze depois trazer de volta a tarefa para o primeiro plano ... mas não é a história.

Posso retomar a partir do ponto em que parei a tarefa?

mthpvg
fonte
Existe um arquivo tar incompleto no local de destino?
Karthik T
Sim, existe um alcatrão incompleto.
Mthpvg 06/12/12

Respostas:

11

Este método recriará seu arquivo tar e anexará a parte final ao arquivo existente. Isso pode ser útil se você fizer backup em uma conexão de rede. Você provavelmente resultará em um arquivo corrompido se algum dos dados em seu INFILES tiver sido alterado. Certifique-se de testar seu arquivo após a conclusão.

Altere INFILES e OUTFILE para os nomes corretos na linha a seguir.

INFILES="my folder"; OUTFILE="archive.tgz"; SIZE="$(wc -c < $OUTFILE)"; tar -cz --to-stdout "$INFILES" | tail -c +$(($SIZE+1)) >> "$OUTFILE"

Explicação:

SIZE="$(wc -c < $OUTFILE)" # Obtenha o tamanho atual do arquivo.

tar -cz --to-stdout "$INFILES" |# Comece a criar archive e envie a saída para o tailcomando.

tail -c +$(($SIZE+1)) >> # Desconsidere os dados antes de $ SIZE + 1 e retome o restante do arquivo $ OUTFILE.

Rucent88
fonte
2
Presumo que isso seja mais rápido do que apenas reiniciar o processo tar, porque na verdade não está gravando nada no disco?
Tyler
2

A melhor solução seria excluir o arquivo tar e reiniciar o processo nohupanexado com &. Como alternativa, você pode executar tar -tfve usar isso como uma exclusão para o novo tar -cvf.

Mark Cohen
fonte
2
tar -cvfsubstituirá o arquivo existente. Você quis dizer tar -rvf? Além disso, o último arquivo gravado no arquivo provavelmente estava incompleto.
Gilles 'SO- stop be evil'
Portanto, a idéia é fazer uma lista dos arquivos que já estão no tarball, menos o último que provavelmente está incompleto. E depois executar um tar -rvf?
Mthpvg 07/12/12
2

Você não pode; você só precisa começar de novo.

psusi
fonte
0

O que faço no caso de ter um tararquivo incompleto , crio uma lista dos arquivos no arquivo:

tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done

O sedcomando exclui todas as linhas que possuem uma barra: Estes são diretórios, não arquivos, e queremos despejar os diretórios novamente e pular apenas esses arquivos nesses diretórios, que já temos no primeiro arquivo tar. Além disso, deixamos de sedexcluir o último nome do arquivo, porque ele provavelmente foi despejado apenas parcialmente, portanto, o arquivaremos novamente.

Em seguida, basta passar a files-donelista através da opção -X para um novo tarcomando:

tar cfvX archive2.tar files-done SOURCEDIR

Certifique-se de usar um nome de arquivo de saída diferente no novo comando tar, ou você substituirá seu arquivo parcial. Não tente anexar diretamente ao arquivo tar corrompido.

Kai Petzke
fonte