Move / transforma tudo de pwd para subdiretório enquanto arquiva com tar

0

Estou em uma máquina MacOS (acho que o comando tar é BSD). A partir da leitura da opção -s no BSD tar, é a mesma coisa que a opção --transform para o tar GNU.

Eu tenho este comando:

tar -zcf foo.tgz -s /^"$(pwd)"/"$(pwd)/package"/ "$(pwd)"

O que estou tentando fazer é arquivar tudo em um arquivo chamado foo.tgz e colocar tudo em um subdiretório chamado "pacote".

Eu recebo este erro:

tar: Invalid replacement flag a

Acredito que o que passou para a opção -s não está correto, mas não tenho certeza do que poderia ser.

Em última análise, eu estou olhando para gravar a saída para stdout, não para um arquivo chamado foo.tgz, então se você quiser atualizá-lo também, por favor, obrigado.

    
por Alexander Mills 15.05.2018 / 21:55

1 resposta

3

Observe a interferência implícita entre a barra usada como separador para o padrão de substituição e a substituição e a barra usada como o separador de diretório. Se o diretório atual for, por exemplo /foo/bar , a string que você está atribuindo a tar is

/^/foo/bar//foo/bar/package/

em que ^ é considerado padrão, foo como substituto e o restante como sinalizadores. Aqui, recebo um erro para o b :

tar: Invalid replacement flag b

Felizmente, o tar no meu Mac aceita outros caracteres no lugar do separador de barra, portanto, você pode usar, digamos, ~ , o que facilita colocar nomes de caminho completos no padrão. por exemplo. -s "~^a$~x/y~" funciona e renomeia a para x/y .

As escapes com contrabarra ( \/ , 7 ou \x2f ) parecem não funcionar, então você precisa escolher como separador algum caractere que não seja necessário nos próprios padrões.

    
por 15.05.2018 / 22:25

Tags