[Toybox] Tar --transform is weird.

Rob Landley rob at landley.net
Fri May 20 07:05:52 PDT 2022


On 5/19/22 18:55, scsijon wrote:
> Sorry for the toppost but i don't know where this should go.

Eh, it was pretty long. :)

> My understanding is that you should be putting the S flag at the START 
> of the transform= line, not the end as it's actioned in order from the = 
> and s is also a transform flag so is actioned first and would overwrite 
> the S flag, ie the S would be ignored.
> 
> https://www.gnu.org/software/tar/manual/html_section/transform.html#transform 
> is the refreance page for this. Look about halfway down for 's' and 'S'.

I did:

The expression is a sed-like replace expression of the form:
s/regexp/replace/[flags]

Supported flags are:
‘g’ Apply the replacement to all matches to the regexp, not just the first.

In addition, several transformation scope flags are supported, that control to
what files transformations apply. These are:
‘r’ Apply transformation to regular archive members.

Where do you get "flags go at the start?" from that? The s at the start (lower
case, not upper case) is the sed search-and-replace command, not a flag. The S I
was talking about is the flag:

‘S’ Do not apply transformation to symbolic link targets.

(Specifying _any_ of the lower case srh seems useless because they're the
default, you'd only use them after an SRH to undo it again and... why? There's
no P to not print after a p... No G to say "I didn't really mean to say global,
actually just do the first one"...)

I've tried to find an example of anyone actually USING the select-by-filetype
flags with tar transform, and so far have not managed to. Do you have an
example? (Could you get it to work?)

Also, why doesn't --strip apply equally to create and extract? Why does the
--show-transformed option exist? (Why would you NOT show the names you're using?
You can always cat "tar.tar | tar t | tar x --transform" if you want the output
NOT to match what it's actually doing, why would you make it the DEFAULT?)

This whole feature does not appear thought out.

(Oh hey, there's a -P option to disable stripping / off the start of extracted
names. Maybe I should implement that? I wonder if that also disables the
../../.. stripping? It doesn't say. Time to test!)

And again, why a --show-stored-names if it's the default? There isn't an "rm -r
--do-not-recurse". How does this HELP?

Rob



More information about the Toybox mailing list