Hi, I believe this is a small bug in the filename transformation option. Assuming that /etc/passwd exists, and trying to change the second letter 's' to '@':
tar cf - /etc/passwd | tar tf - --transform='s:s:@:2' --show-transformed-names tar: Removing leading `/' from member names etc/paetc/pas@wd A simple reordering of the code produces the expected result 'etc/pas@wd' Anthony diff --git a/src/transform.c b/src/transform.c index 2b60235..2cc927e 100644 --- a/src/transform.c +++ b/src/transform.c @@ -493,9 +493,6 @@ _single_transform_name_to_obstack (struct transform *tf, char *input) disp = rmp[0].rm_eo; - if (rmp[0].rm_so) - obstack_grow (&stk, input, rmp[0].rm_so); - nmatches++; if (tf->match_number && nmatches < tf->match_number) { @@ -504,6 +501,9 @@ _single_transform_name_to_obstack (struct transform *tf, char *input) continue; } + if (rmp[0].rm_so) + obstack_grow (&stk, input, rmp[0].rm_so); + for (segm = tf->repl_head; segm; segm = segm->next) { switch (segm->type)