Come posso riprendere un comando tar che è stato ucciso


11

Stavo facendo un: tar -cvfe ho dovuto ucciderlo con ctrl-C. So che avrei dovuto fare un Ctrl-Ze poi riportare il compito in primo piano ... ma non è la storia.

Posso riprendere dal punto in cui ho interrotto l'attività?


Esiste un file tar incompleto nella posizione di destinazione?
Karthik T,

Sì, c'è un catrame incompleto.
mthpvg,

Risposte:


11

Questo metodo ricrea il tuo archivio tar e accoda la parte finita al file esistente. Questo può essere utile se si esegue il backup su una connessione di rete. Probabilmente si otterrà un archivio corrotto se uno qualsiasi dei dati in INFILES è cambiato. Assicurati di testare il tuo archivio dopo il completamento.

Modificare INFILES e OUTFILE con i nomi corretti nella riga seguente.

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

Spiegazione:

SIZE="$(wc -c < $OUTFILE)" # Ottieni le dimensioni correnti dell'archivio.

tar -cz --to-stdout "$INFILES" |# Inizia a creare l'archivio e invia l'output al tailcomando.

tail -c +$(($SIZE+1)) >> # Ignora i dati prima di $ SIZE + 1 e riprendi il resto dell'archivio $ OUTFILE.


2
Presumo che questo sia più veloce del semplice riavvio del processo tar perché in realtà non sta scrivendo nulla sul disco?
Tyler,

2

La soluzione migliore sarebbe quella di eliminare il file tar e riavviare il processo anteposto nohupe aggiunto &. In alternativa, è possibile eseguirlo tar -tfve utilizzarlo come esclusione per il nuovo tar -cvf.


2
tar -cvfsovrascriverà il file esistente. Volevi dire tar -rvf? Inoltre, l'ultimo file che è stato scritto nell'archivio era probabilmente incompleto.
Gilles 'SO- smetti di essere malvagio' il

Quindi l'idea è quella di fare un elenco dei file che sono già nel tarball, meno l'ultimo che è probabilmente incompleto. E quindi eseguire un tar -rvf?
mthpvg,

2

Non puoi; devi solo ricominciare da capo.


0

Quello che faccio nel caso in cui disponga di un tararchivio incompleto , creo un elenco dei file nell'archivio:

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

Il sedcomando elimina tutte quelle righe che presentano una barra finale: si tratta di directory, non di file, e vogliamo scaricare di nuovo le directory e saltare solo quei file in quelle directory, che abbiamo già nel primo archivio tar. Inoltre, lasciamo sedeliminare l'ultimo nome di file, perché molto probabilmente è stato scaricato solo parzialmente, quindi lo archiveremo di nuovo.

Quindi passa l' files-doneelenco tramite l'opzione -X a un nuovo tarcomando:

tar cfvX archive2.tar files-done SOURCEDIR

Assicurati di usare un nome file di output diverso sul nuovo comando tar, altrimenti sovrascriverai il tuo archivio parziale. Non provare ad aggiungere direttamente all'archivio tar corrotto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.