Com o GNU tar (a implementação de tar padrão no Linux não embarcado e no Cygwin):
tar czf env.tgz --transform 's/-deploy$//' .bashrc-deploy .profile …
Isso também é possível com o pax, o substituto POSIX para cpio e tar, que infelizmente está faltando em muitas instalações padrão do Linux, e também com o tar do BSD:
pax -w -x ustar '-s/-deploy$//' .bashrc-deploy .profile … | gzip >env.tgz
bsdtar -czf env.tgz '-s/-deploy$//' .bashrc-deploy .profile …
Nos três casos, a sintaxe s/REGEX/REPLACEMENT/
é igual a ed
ou sed
.
Eu questiono sua abordagem. Ter arquivos com o mesmo nome, mas conteúdos diferentes em máquinas diferentes, é difícil de manter. Além disso, é fácil cometer um erro se alguns arquivos devem permanecer privados. Minha recomendação é armazenar seus arquivos de configuração em subdiretórios e usar links simbólicos. Por exemplo, se .bashrc
precisar ser particular e específico do site e .profile
precisar ser público e for o mesmo em todos os lugares:
.bashrc -> etc/local/private/.bashrc
.profile -> etc/.profile
Torne etc/local
um link simbólico para um diretório cujo nome é dependente do site (por exemplo, ~/etc/home
ou ~/etc/work
), garanta que ~/etc/private
e ~/etc/*/private
sejam acessados somente por você e que você esteja definido . Você pode implantar o diretório ~/etc
inteiro e só precisará definir o link simbólico etc/local
depois de descompactar o arquivo (ou, melhor ainda, fazer o check-out de controle de versão ).
Para um arquivo como .bashrc
, que é provavelmente público e independente do site, divida o arquivo em duas (ou até quatro) partes, público e privado (além de arquivos específicos do site, se necessário). A parte principal inclui as partes locais:
if [ -e ~/etc/private/.bashrc ]; then . ~/etc/private/.bashrc; fi
if [ -e ~/etc/local/.bashrc ]; then . ~/etc/local/.bashrc; fi
if [ -e ~/etc/local/private/.bashrc ]; then . ~/etc/local/private/.bashrc; fi
Em arquivos escritos em uma linguagem de programação, você pode testar dinamicamente o nome do host ou o nome do domínio ou outra característica dependente do site, o que permite ter um único arquivo para manter.
case $HOSTNAME in
darkstar) alias foo=some-local-command;;
esac
É um pouco surpreendente ter conteúdo confidencial em .bashrc
. Se você estiver definindo variáveis de ambiente, eles pertencem a ~/.profile
.