Eu estava fazendo um: tar -cvf
e eu tive que matá-lo com ctrl-C
. Eu sei que deveria ter feito um Ctrl-Z
e 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?
Eu estava fazendo um: tar -cvf
e eu tive que matá-lo com ctrl-C
. Eu sei que deveria ter feito um Ctrl-Z
e 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?
Respostas:
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 tail
comando.
tail -c +$(($SIZE+1)) >>
# Desconsidere os dados antes de $ SIZE + 1 e retome o restante do arquivo $ OUTFILE.
A melhor solução seria excluir o arquivo tar e reiniciar o processo nohup
anexado com &
. Como alternativa, você pode executar tar -tfv
e usar isso como uma exclusão para o novo tar -cvf
.
tar -cvf
substituirá o arquivo existente. Você quis dizer tar -rvf
? Além disso, o último arquivo gravado no arquivo provavelmente estava incompleto.
tar -rvf
?
O que faço no caso de ter um tar
arquivo incompleto , crio uma lista dos arquivos no arquivo:
tar tf archive.tar | sed -e '/\/$/d' -e x -e '/^$/d' >files-done
O sed
comando 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 sed
excluir o último nome do arquivo, porque ele provavelmente foi despejado apenas parcialmente, portanto, o arquivaremos novamente.
Em seguida, basta passar a files-done
lista através da opção -X para um novo tar
comando:
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.