Je faisais un: tar -cvf
et 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?
Je faisais un: tar -cvf
et 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?
Réponses:
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 tail
commande.
tail -c +$(($SIZE+1)) >>
# Ignorez les données avant $ SIZE + 1 et reprenez le reste de l'archive $ OUTFILE.
La meilleure solution serait de supprimer le fichier tar et de redémarrer le processus avant nohup
et après &
. Alternativement, vous pouvez l'exécuter tar -tfv
et l'utiliser comme exclusion pour le nouveau tar -cvf
.
tar -cvf
écrasera le fichier existant. Vous vouliez dire tar -rvf
? De plus, le dernier fichier écrit dans l'archive était probablement incomplet.
tar -rvf
?
Ce que je fais dans le cas, que j'ai une tar
archive 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 sed
commande 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 sed
supprimer 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-done
liste via l'option -X à une nouvelle tar
commande:
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.