[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 (&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 <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