Re: Compressed Tar : stop on first occurrence

Glynn Clements <[email protected]>
Newsgroups gmane.linux.admin
Message-ID <[email protected]>
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 (&current_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 <[email protected]>
-
To unsubscribe from this list: send the line "unsubscribe linux-admin" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.