Comment reprendre une commande tar qui a été tuée

11

Je faisais un: tar -cvfet je devais le tuer avec ctrl-C. Je sais que j'aurais dû faire un Ctrl-Z, puis remettre la tâche au premier plan ... mais ce n'est pas l'histoire.

Puis-je reprendre à partir du moment où j'ai arrêté la tâche?

mthpvg
la source
Y a-t-il un fichier tar incomplet à l'emplacement de destination?
Karthik T
Oui, il y a un goudron incomplet.
mthpvg

Réponses:

11

Cette méthode recréera votre archive tar et ajoutera la pièce finie au fichier existant. Cela peut être utile si vous effectuez une sauvegarde via une connexion réseau. Vous obtiendrez probablement une archive corrompue si l'une des données de vos INFILES a changé. Assurez-vous de tester vos archives une fois terminé.

Remplacez INFILES et OUTFILE par les noms corrects sur la ligne suivante.

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

Explication:

SIZE="$(wc -c < $OUTFILE)" # Récupère la taille actuelle de l'archive.

tar -cz --to-stdout "$INFILES" |# Commencez à créer une archive et envoyez la sortie à la tailcommande.

tail -c +$(($SIZE+1)) >> # Ignorez les données avant $ SIZE + 1 et reprenez le reste de l'archive $ OUTFILE.

Rucent88
la source
2
Je suppose que c'est plus rapide que de simplement redémarrer le processus tar parce que ce n'est vraiment rien écrire sur le disque?
Tyler
2

La meilleure solution serait de supprimer le fichier tar et de redémarrer le processus avant nohupet après &. Alternativement, vous pouvez l'exécuter tar -tfvet l'utiliser comme exclusion pour le nouveau tar -cvf.

Mark Cohen
la source
2
tar -cvfécrasera le fichier existant. Vous vouliez dire tar -rvf? De plus, le dernier fichier écrit dans l'archive était probablement incomplet.
Gilles 'SO- arrête d'être méchant'
L'idée est donc de faire une liste des fichiers qui sont déjà dans l'archive tar, moins le dernier qui est probablement incomplet. Et puis lancez un tar -rvf?
mthpvg
2

Tu ne peux pas; il vous suffit de recommencer.

psusi
la source
0

Ce que je fais dans le cas, que j'ai une tararchive incomplète , je crée une liste des fichiers dans l'archive:

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

La sedcommande supprime toutes ces lignes, qui ont une barre oblique: Ce sont des répertoires, pas des fichiers, et nous voulons à nouveau vider les répertoires et ne sauter que ces fichiers dans ces répertoires, que nous avons déjà dans la première archive tar. De plus, nous laissons sedsupprimer le dernier nom de fichier, car celui-ci n'a probablement été sauvegardé que partiellement, nous allons donc l'archiver à nouveau.

Passez ensuite la files-doneliste via l'option -X à une nouvelle tarcommande:

tar cfvX archive2.tar files-done SOURCEDIR

Assurez-vous d'utiliser un nom de fichier de sortie différent dans la nouvelle commande tar, sinon vous écraserez votre archive partielle. N'essayez pas d'ajouter directement à l'archive tar corrompue.

Kai Petzke
la source