Linux tar: somente --transformar certos arquivos

1

Estou escrevendo um script bash que empacota meu aplicativo em um arquivo TAR. Os arquivos não estão organizados no disco como eles precisam ser organizados no arquivo TAR, então decidi usar a opção --transform.

No entanto, parece que o comando --transform é aplicado globalmente em vez de ser aplicado aos arquivos incluídos depois.

Exemplo:

tar \
--exclude='webmanager/bin/dev' \
--exclude='webmanager/.config.ini' \
--show-transformed-names \
--create --gzip --verbose \
--file 'output.tgz' \
-C '../../../' \
'include' \
'resources' \
'webmanager' \
'rootconfig.php' \
-C 'webmanager/bin/dev' \
'index.php' \
'README.md' \
--transform='s|^|webmanager/|r' \
'.config.ini'

Basicamente, esse código pega um arquivo de webmanager/bin/dev/.config.ini e o coloca em webmanager/.config.ini no arquivo TAR. Mas eu só quero que o arquivo .config.ini seja transformado. Atualmente, todo o conteúdo está sendo transformado e prefixado com webmanager/ . Eu esperava que esse comando se comportasse como -C (altere o diretório atual) - onde ele afeta apenas as entradas depois dele.

Eu examinei as páginas de manual do TAR e não consigo descobrir como fazer isso corretamente. Por favor ajude!

    
por Bradley Odell 07.12.2016 / 01:57

1 resposta

1

Parece que a opção --transform funciona em todos os arquivos de fato. A propósito, encontrei esta página sobre tar que pode ajudá-lo de alguma forma.

Se eu puder, sugiro uma abordagem diferente: coloque os arquivos como você precisa em um diretório temporário (o comando cp servirá), modifique o seu arquivo .config.in com sed e use tar para embalar tudo. Você pode criar um script até mesmo um Makefile, se você estiver familiarizado com make .

    
por 07.12.2016 / 16:15