[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-admin
Subject: Re: Compressed Tar : stop on first occurrence
From: Glynn Clements <glynn () gclements ! plus ! com>
Date: 2006-10-20 21:58:53
Message-ID: 17721.18077.490010.833989 () cerise ! gclements ! plus ! com
[Download RAW message or body]
Mauricio Silveira wrote:
> terry white wrote:
> > ... ciao:
> >
> > : on "10-20-2006" "Mauricio Silveira" writ:
> > : I'm wondering if there's any way to get tar to stop immediately after
> > : the extraction of a file on compressed tar files. eg: I pack a big tgz
> >
> > 'man tar' offers:
> >
> > -T, --files-from F
> > get names to extract or create from file F
> >
> >
> > : when I run "tar xf file.tgz --occurrence index.txt"
> >
> > HOWEVER , i'm using a gnu flavour 'tar', which does "not" list
> > '--occurrence' as an option, so, the suggestion above may not apply ..
> I know 1.13 doesn't have this option (at least on command line help).
>
> I did some research on the source code for tar 1.15.1 and found a place
> to insert a simple exit() when using "--occurrence filename" to force
> tar to quit on a "match".
>
> I think this is the way tar should behave... compressed or non
> compressed files, tar actions behavior should be the same.
The issue isn't compressed vs non-compressed. tar doesn't read
compressed files, ever; if you use -z, -j, or --use-compress-program,
tar spawns a child process to perform [de]compression. tar itself only
ever reads or writes uncompressed archives.
The issue is reading an archive from a file vs reading it from a pipe
or socket. In the latter case, it *intentionally* reads the entire
stream to avoid causing abnormal termination in the process which is
producing the data (e.g. gzip, in the case of -x).
> I think I should send tar this issue as a bug... as far as tar waits for
> its child "compress program" pipe to end.
If you read any of what I wrote, you will realise that it isn't a bug,
it's quite intentional behaviour.
> --- list.c.org 2006-10-20 15:09:17.000000000 -0200
> +++ list.c 2006-10-20 15:07:51.000000000 -0200
> @@ -199,6 +199,7 @@
> }
> while (!all_names_found (¤t_stat_info));
>
> + exit(EXIT_SUCCESS);
> close_archive ();
> names_notfound (); /* print names not found */
> }
This "fix" is wrong on so many levels. If you don't want to drain the
pipe, then don't drain the pipe, as I explained last time. There's no
reason to bypass the rest of the termination process, all of which is
there for one reason or another.
--
Glynn Clements <glynn@gclements.plus.com>
-
To unsubscribe from this list: send the line "unsubscribe linux-admin" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic