Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: ${i:r}-question



From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
Subject: Re: ${i:r}-question
Date: Sat, 27 Aug 2005 20:44:40 +0000

Hi Bart , :)

 thanks for your reply  ! :O)

 To "unbroke" my broken English a little bit more I will try to tell a
 little more of my (a little longish) "archiver/compressor"-story.

 p7zip is a data compressor, which has a compression ratio even better
 than bzip2 (!). Since "space" on my harddisk is a seldom guest, I was
 happy, that Oskar, the author of atool has implemented the "arepack"
 tool in addition to all the other very handy tools of his atool suit.

 In opposite to bzip2/gzip p7zip is able to build archives of more
 than one file. Since it originates in the Windows world, it does not
 reconstruct certain attributes like gid and uid of the files of such
 an p7zip-only-many-files archive. The author of p7zip recommends to
 make a tar archive first and then compress it with p7zip for backup
 purposes on Unix/Linux (which I use).

 The format of the commandline to feed into arepack is as follows:

	 arepack -F<new target archive form> -e <old archive/s>

 For *.tar.gz archives it would be:

 	 arepack -F.tar.7z -e zsh-4.2.5.tar.gz

 but if you get a single file compressed with gzip for example, it
 would be:
 
 	 arepack -F.7z -e zsh-doc-4.2.5.gz

 Therefore I was looking for a zsh script expression -- without the
 need to use "big brothers" like sed, perl etc -- which simply gives
 me "the whole extension string" in one turn, without to destinguish
 between the 2-extension form like ".tar.gz" from the 1-extension-form
 like ".gz" in the script code itsself in beforehand. Additionally it
 would be nice, if the code would give me the information, whether it
 has found a 2- or an 1-extension form. Or shorter:

                             Output:

 Input:                      +------> complete extension
                             |
 <filename> -----> script ---+
                             |
                             +------> info whether it is an 1- or
                                      2-extension form

 The code fragment

	 ${${(M)afile%%(.tar|).(7z|bz2|gz)}#.}	

 would fail on files, which are of the pattern

	 zsh-4.2.5-doc.bz2  (only one extension) 

 or? (and all files, which are no Makefiles.... ;O)

 If I would have such an code fragment as desribed above, I would
 simply replace any ".tgz" string in a ".tar,gz" string afterwards
 (.tbz -> .tar.bz2 accordingly) and I would check for a ".tgz" string
 and then generate a ".tar.7z" string for the "-F<new format> part of
 the commandline to be fed into arepack.

 Dont hesitate to mail and ask again, Bart, if something is unclear --
 English isn't my mother's tongue...sorry.

 Have a nice weekend and thank you very much for your help and
 patience with my English in advance ! :)
 Meino

> On Aug 26,  6:32pm, Meino Christian Cramer wrote:
> } 
> }  I am currently wrting a little shell script, which encapsulates the
> }  new "arepack" addition of atool-0.31.0 (nice tool! use it! :O))).
> 
> I'm glad you answered zzapper's question because I was scratching my
> head over why it made a difference if the bzip'd file was also tar'd.
>  
> }  I am wondering, whether it would possible to strip off more than one
> }  "instance" of extension ("tar.bz2" instead of "bz2") from "$afile"
> 
> You mean e.g. ${${(M)afile%%(.tar|).(7z|bz2|gz)}#.} except that you
> don't want to have to enumerate (7z|bz2|gz)?  Otherwise I'm not clear
> on the question.
> 
> Incidentally if it's important to know about the "tar" part, then have
> you considered what to do with e.g. ".tgz" files?
> 



Messages sorted by: Reverse Date, Date, Thread, Author