delete string recursivamente de todos os arquivos index.php em uma pasta pessoal

1

Precisamos de um script de shell para encontrar e substituir um código injetado em todos os arquivos index.php dentro de uma pasta / home

    
por euan 18.02.2011 / 11:56

2 respostas

5

Você pode fazer isso com sed. Aqui está um bom tutorial sobre isso. Pode ser tão simples quanto find /home/user -iname index.php -exec sed -i s/<piece of code to find/<replace with that>/ {} \;

Eu sugiro que você faça um backup antes de fazer isso e execute alguns testes para ver se funciona bem. Lembre-se que as coisas entre o / / são expressões regulares e, dependendo do formato, você pode terminar combinando mais coisas que você precisa. Como eu disse, teste antes de executar isso em seus arquivos 'ao vivo'.

EDIT: corrigido o comando find, obrigado rems

    
por 18.02.2011 / 12:04
2
for file in $(find /home/user -iname index.php)
do
  echo "replacing in file $file ..."
  sed -i 's/<piece of code to find>/<replace with that>/g' $file
done

Se você quiser testar primeiro, poderá colocá-lo primeiro em um arquivo temporário, verificar se está correto e substituir o arquivo original posteriormente:

for file in $(find /home/user -iname index.php)
do
  echo "reading from $file, writing to $file.tmp ..."
  sed 's/<piece of code to find>/<replace with that>/g' $file > $file.tmp
done

Agora, leia alguns dos seus arquivos e verifique se a substituição foi feita corretamente. Se tudo estiver ok, renomeie os novos arquivos index.php.tmp para index.php com

for file in $(find /home/user -iname index.php.tmp)
do
  echo "moving $file.tmp to $file ..."
  mv $file.tmp $file
done

Se o código que você deseja substituir tiver barras ("/") nele, você poderá usar outro delimitador no comando substituto do sed: # pedaço de código para encontrar # substituir por este #g '

    
por 18.02.2011 / 12:40