paulo1205
(usa Ubuntu)
Enviado em 21/07/2015 - 20:31h
juliano_lc escreveu:
O conteúdo da pasta /lista são arquivos .txt...
Dentro destes arquivos .txt, contém diretórios como:
/mnt/
/tmp/
Esses diretórios são de servidores remotos. O local /mnt/server_alvo é um ponto de montagem no servidor remoto.
O que pretendo fazer é compactar os diretórios mencionados nesses arquivos. Para isso eu estou usando a expressão abaixo:
ARQUIVOS=`sed -n '2,$ p' /tmp/lista/*`
tar -zcpvf /mnt/server_alvo/root/scripts/$LISTA-$DATA.tar.gz /mnt/server_alvo/$ARQUIVOS
Parei aqui porque aqui está o erro.
Se você examinar o conteúdo da variável
ARQUIVOS, verá que deve ser mais ou menos o seguinte.
/mnt/ /tmp/ ...
Se você fizer algo como “
echo ABC$ARQUIVOS”, não vai obter “
ABC/mnt/ ABC/tmp/ ABC...”, mas sim “
ABC/mnt/ /tmp/ ...”.
Se eu quiser colocar o prefixo ABC antes do texto de cada linha, eu teria de fazer essa transformação explicitamente.
echo `echo $ARQUIVOS | sed 's/^/ABC/;s/ / ABC/g'`
Note que o código acima é meio perigoso porque impede a existência de arquivos com nomes que contenham espaços (mas a sua versão já tinha esse problema).
Por que você não usa a opção
-T do tar, que especifica a lista de objetos a arquivar a partir de um arquivo (um objeto por linha), e faz com que cada linha desse arquivo contenha o prefixo desejado? Não precisa nem criar um arquivo, se usar os named pipes do bash.
tar -zcpvf /mnt/server_alvo/root/scripts/$LISTA-$DATA.tar.gz -T <(sed '1d;s,^,/mnt/server_alvo,' /tmp/lista/*)