¿Cómo reanudo un comando tar que fue asesinado?

11

Estaba haciendo un: tar -cvfy tuve que matarlo con ctrl-C. Sé que debería haber hecho una Ctrl-Zy luego volver a poner la tarea en primer plano ... pero no es la historia.

¿Puedo reanudar desde el punto en que detuve la tarea?

mthpvg
fuente
¿Hay un archivo tar incompleto en la ubicación de destino?
Karthik T
Sí, hay un alquitrán incompleto.
mthpvg

Respuestas:

11

Este método recreará su archivo tar y agregará la parte terminada al archivo existente. Esto puede ser útil si realiza una copia de seguridad a través de una conexión de red. Probablemente resultará en un archivo corrupto si alguno de los datos en sus INFILES ha cambiado. Asegúrese de probar su archivo una vez completado.

Cambie INFILES y OUTFILE a los nombres correctos en la siguiente línea.

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

Explicación:

SIZE="$(wc -c < $OUTFILE)" # Obtener el tamaño actual del archivo.

tar -cz --to-stdout "$INFILES" |# Comience a crear el archivo y envíe la salida al tailcomando.

tail -c +$(($SIZE+1)) >> # Haga caso omiso de los datos antes de $ SIZE + 1 y reanude el resto del archivo $ OUTFILE.

Rucent88
fuente
2
Supongo que esto es más rápido que simplemente reiniciar el proceso tar porque en realidad no está escribiendo nada en el disco.
Tyler
2

La mejor solución sería eliminar el archivo tar y reiniciar el proceso antepuesto nohupy anexado &. Alternativamente, puede ejecutar tar -tfvy usar eso como una exclusión para lo nuevo tar -cvf.

Mark Cohen
fuente
2
tar -cvfsobrescribirá el archivo existente. Quiso decir tar -rvf? Además, el último archivo que se escribió en el archivo probablemente estaba incompleto.
Gilles 'SO- deja de ser malvado'
Entonces, la idea es hacer una lista de los archivos que ya están en el tarball, menos el último que probablemente esté incompleto. Y luego ejecutar un tar -rvf?
mthpvg
2

No puedes; solo necesitas comenzar de nuevo.

psusi
fuente
0

Lo que hago en el caso, que tengo un tararchivo incompleto , creo una lista de los archivos en el archivo:

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

El sedcomando elimina todas esas líneas, que tienen una barra inclinada final: son directorios, no archivos, y queremos volcar los directorios nuevamente y solo omitir esos archivos en esos directorios, que ya tenemos en el primer archivo tar. Además, dejamos que sedeliminemos el último nombre de archivo, porque es muy probable que se haya volcado solo parcialmente, por lo que lo archivaremos nuevamente.

Luego, simplemente pase la files-donelista a través de la opción -X a un nuevo tarcomando:

tar cfvX archive2.tar files-done SOURCEDIR

Asegúrese de utilizar un nombre de archivo de salida diferente en el nuevo comando tar, o sobrescribirá su archivo parcial. No intente agregar directamente al archivo tar corrupto.

Kai Petzke
fuente