Re: Compressed Tar : stop on first occurrence

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxxxxxx>
-
To unsubscribe from this list: send the line "unsubscribe linux-admin" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Newbie]     [Audio]     [Hams]     [Kernel Newbies]     [Util Linux NG]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Device Drivers]     [Samba]     [Video 4 Linux]     [Git]     [Fedora Users]

  Powered by Linux