Removing a file from a tar

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Removing a file from a tar

Adam A. Zajac
I was reading over the documentation for the tarfile module and it
occurred to me that there didn't seem to be a way to remove an
individual file from the tar.

For example, suppose I did this:

import tarfile
tar = tarfile.open("sample.tar", "w")
tar.add("unwanted")
tar.add("wanted")
tar.close()

At this point, how could I come back and remove "unwanted" from the tar?
_______________________________________________
Tutor maillist  -  [hidden email]
http://mail.python.org/mailman/listinfo/tutor
Reply | Threaded
Open this post in threaded view
|

Re: Removing a file from a tar

David Rock
* Adam A. Zajac <[hidden email]> [2007-06-27 11:26]:

> I was reading over the documentation for the tarfile module and it
> occurred to me that there didn't seem to be a way to remove an
> individual file from the tar.
>
> For example, suppose I did this:
>
> import tarfile
> tar = tarfile.open("sample.tar", "w")
> tar.add("unwanted")
> tar.add("wanted")
> tar.close()
>
> At this point, how could I come back and remove "unwanted" from the tar?

Wel, it looks like tar's --remove-files is not supported yet, you would
probably have to reopen the tarfile, write it to a new one file-by-file,
excluding the ones you don't want.  Messy :-(

--
David Rock
[hidden email]
_______________________________________________
Tutor maillist  -  [hidden email]
http://mail.python.org/mailman/listinfo/tutor
Reply | Threaded
Open this post in threaded view
|

Re: Removing a file from a tar

Tiger12506
>* Adam A. Zajac <[hidden email]> [2007-06-27 11:26]:
>> I was reading over the documentation for the tarfile module and it
>> occurred to me that there didn't seem to be a way to remove an
>> individual file from the tar.
>>
>> For example, suppose I did this:
>>
>> import tarfile
>> tar = tarfile.open("sample.tar", "w")
>> tar.add("unwanted")
>> tar.add("wanted")
>> tar.close()
>>
>> At this point, how could I come back and remove "unwanted" from the tar?
>
> Wel, it looks like tar's --remove-files is not supported yet, you would
> probably have to reopen the tarfile, write it to a new one file-by-file,
> excluding the ones you don't want.  Messy :-(

Disclaimer: I was not alive during the described era. This information may
be off or just plain wrong. Perhaps someone who was alive then will correct
any errors(?).

Remove is not supported because of the way tar s were designed. They were
designed for tape drive backups, that is 'tar' Tape ARchive. Because they
were designed as a backup scheme for tape drives, there was no need to have
a remove function.

|  File1 | File2 | File3 |
Remove File2
| File1 |       | File3|

Moving file3 up would mean that the tape would have to rock back and forth,
something that tapes just weren't supposed to do. Not moving file3 up would
very nearly defeat the purpose of deleting file2 in the first place: to save
space. (Which was important then - and should be now... tsk, tsk Microsoft)

Anyway, there was no need to have a remove function because people just did
what Adam said - write a whole new tape. Now that tar is no longer widely
used for tapes, there are other formats (like RAR) that *are* designed for
modern storage equipment.

HTH,
Tiger12506

_______________________________________________
Tutor maillist  -  [hidden email]
http://mail.python.org/mailman/listinfo/tutor