Script shell para substituir string em todos os arquivos PHP, para cada usuário

0

Cada usuário possui alguns arquivos php usando um banco de dados compartilhado commondb . Eu quero iterar todos os usuários (em users.csv), e em sua pasta pessoal (por exemplo, / home / joe) encontrar todos os arquivos php recursivamente, e substituir cada ocorrência de "commondb" pelo seu próprio databasename, por exemplo. "joedb" para "joe".

Eu tentei o seguinte:

#!/bin/bash
# Execute like this:
# bash localize.bash users.csv

OLDIFS=$IFS
IFS=","
while read name dummy
  do
    echo $name
    find /home/${name} -name '*.php' -exec sed -i '' 's/commondb/${name}db/g' "{}" \;

  done < $1
IFS=$OLDIFS

para users.csv

joe, Joe J
george, George G

Não falha, mas os arquivos permanecem inalterados. Eu sou muito fraco no bash, e não consigo descobrir como depurá-lo: /

O meu script pode ser corrigido para funcionar?

    
por Mads Skjern 06.11.2013 / 10:16

1 resposta

0

Não consegui ver nada de errado com o seu código no início. Na verdade, eu o executei e funcionou bem, exceto que ele substituiu o commondb por $ {name}, em vez do uso de aspas simples no comando sed. Mudar para aspas duplas funcionou bem.

#!/bin/bash
# Execute like this:
# bash localize.bash users.csv

OLDIFS=$IFS
IFS=","
while read name dummy
  do
    echo $name
    find /home/${name} -name '*.php' -exec sed -i '' "s/commondb/${name}db/g" "{}" \;

  done < $1
IFS=$OLDIFS
    
por 06.11.2013 / 14:15

Tags