Estava querendo personalizar os arquivos com as mensagens de erro do Squid, colocando o logo da empresa nas mensagens. Resolvi o problema com o find + sed:
# find . -type f | while read NOME; do NOVO=`echo "$NOME"1`; sed '/<BODY>.*$/a Viva o Linux' $NOME > $NOVO; mv $NOVO $NOME; done
O que faz cada comando?
find . -type f:
Localizará os arquivos do diretório, você deverá executar esse script no diretório /usr/local/squid/share/errors/Portuguese (ou qualquer outro diretório onde se encontre suas mensagens de erro).
while read NOME; do
Armazenará na variável NOME o nome de cada arquivo encontrado.
NOVO=`echo "$NOME"1`;
Armazenará o nome do arquivo seguido do número 1, será um arquivo temporário a ser utilizado pelo sed.
sed '/<BODY>.*$/a Viva o Linux<hr>' $NOME > $NOVO;
Localizará o texto "<BODY>" e cada vez que localizar, irá adicionar "Viva o Linux<hr>". Isso será feito com o arquivo de nome $NOME e enviado para o arquivo $NOVO
mv $NOVO $NOME;
Para substituir o arquivo antigo pelo gerado através do sed.
[2] Comentário enviado por davidsonpaulo em 30/06/2009 - 08:44h
Opa, o comando que postei no primeiro comentário estava com alguns erros, mas já corrigi. :-)
Aproveitando, segue a explicação do comando acima.
A opção -exec é usada para que o find execute uma operação em todos os arquivos/diretórios encontrados durante a busca.
A opção -i do sed serve para fazer a alteração no próprio arquivo, dessa forma não é necessário gerar um arquivo temporário e depois substituir o original.
As duas chaves {} representam o arquivo encontrado pelo find.
Para terminar, o \; é um parâmetro obrigatório para indicar que o comando relacionado ao parâmetro -exec chegou ao fim.