Eu escolheria essa abordagem:
#!/bin/bash
path='/path'
line1='foo'
line2='bar'
while read f; do
if [ ! "$(grep "$line1" "$f")" ] && [ ! "$(grep "$line2" "$f")" ]; then
echo "$line1" >> "$f"
echo "$line2" >> "$f"
fi
done < <(find "$path" -type f -name 'php.ini')
Algumas notas:
-
$pathé declarado / inicializado internamente, mas pode ser passado como um argumento para o script com poucas / poucas modificações, se for mais conveniente; -
find "$path" -type f -name 'php.ini'é executado em um shell externo e sua saída é redirecionada para o loopwhileusando uma substituição de processo, porque canalizar sua saída diretamente para o loopwhileteria deixado$line1e$line2fora do% o escopo do loop dewhile; -
-type finfind "$path" -type f -name 'php.ini'pode ser redundante, mas apenas para garantir; - Os dois comandos
echopoderiam ter sido mesclados em um único comandoecho, mas isso seria necessário para adicionar uma opção-epara escapar da seqüência\n; sem saber as strings exatas a serem anexadas (que podem conter outras seqüências de escape), não usar uma opção-ee usar dois comandosechoé mais seguro;
O script pesquisa, recursivamente, por qualquer arquivo chamado php.ini no $path caminho; para cada arquivo, se os comandos grep na instrução if não retornarem 0 (ou seja, se nem uma linha contendo / combinando a string $line1 nem uma linha contendo / correspondendo a $line2 string encontrada no arquivo), $line1 e $line2 são acrescentados no final do arquivo.
Exemplo de saída em uma hierarquia de teste:
user@debian ~/tmp % tree -a
.
├── 1
│ ├── 2
│ │ ├── 3
│ │ │ ├── file
│ │ │ └── php.ini
│ │ ├── file
│ │ └── php.ini
│ ├── file
│ └── php.ini
└── script.sh
3 directories, 7 files
user@debian ~/tmp % find 1 -type f -exec bash -c 'echo -e "{}:\n"; cat {}; echo' \;
1/php.ini:
foo
bar
another line
1/file:
foo
bar
another line
1/2/3/php.ini:
foo
bar
another line
1/2/3/file:
foo
bar
another line
1/2/php.ini:
just one line
1/2/file:
foo
bar
another line
user@debian ~/tmp % bash script.sh
user@debian ~/tmp % find 1 -type f -exec bash -c 'echo -e "{}:\n"; cat {}; echo' \;
1/php.ini:
foo
bar
another line
1/file:
foo
bar
another line
1/2/3/php.ini:
foo
bar
another line
1/2/3/file:
foo
bar
another line
1/2/php.ini:
just one line
foo
bar
1/2/file:
foo
bar
another line