11

I was doing a : tar -cvf and I had to killed it with ctrl-C. I know I should have done a Ctrl-Z and then bring back the task to foreground... but it's not the story.

Can I resume from the point I stopped the task ?

  • Is there an incomplete tar file in the destination location? – Karthik T Dec 6 '12 at 9:35
  • Yes there is an incomplete tar. – mthpvg Dec 6 '12 at 10:05
11

This method will recreate your tar archive, and append the finished part to the existing file. This can be useful if backing up over a network connection. You will likely result in a corrupt archive if any of the data in your INFILES has changed. Be sure to test your archive after completion.

Change INFILES and OUTFILE to the correct names on the following line.

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

Explanation:

SIZE="$(wc -c < $OUTFILE)" # Get the current size of the archive.

tar -cz --to-stdout "$INFILES" | # Begin creating archive and send output to tail command.

tail -c +$(($SIZE+1)) >> # Disregard the data before $SIZE+1, and resume the rest of the archive $OUTFILE.

| improve this answer | |
  • 2
    I assume this is faster than just restarting the tar process because its not actually writing anything to disk? – Tyler Jul 31 '16 at 6:03
3

What I do in the case, that I have an incomplete tar archive, I create a list of the files in the archive:

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

The sed command deletes all those lines, that have a trailing slash: These are directories, not files, and we want to dump the directories again and only skip those files in those directories, that we have already in the first tar archive. Furthermore, we let sed delete the last filename, because that has very likely been dumped only partially, so we will archive it again.

Then just pass the files-done list via the -X option to a new tar command:

tar cfvX archive2.tar files-done SOURCEDIR

Make sure to use a different output filename on the new tar command, or you will overwrite your partial archive. Do not try to directly append to the corrupt tar archive.

| improve this answer | |
2

The best solution would be to delete the tar file and restart the process prepended with nohup and appended with &. Alternatively, you could run tar -tfv and use that as an exclude for the new tar -cvf.

| improve this answer | |
  • 2
    tar -cvf will overwrite the existing file. Did you mean tar -rvf? Also, the last file that was written to the archive was likely incomplete. – Gilles 'SO- stop being evil' Dec 6 '12 at 23:04
  • So the idea is to make a list of the files which are already in the tarball, minus the last one which is probably incomplete. And then run a tar -rvf ? – mthpvg Dec 7 '12 at 10:42
2

You can't; you just need to start over.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.