Altera recursivamente o nome de um arquivo e o conteúdo dentro do arquivo se corresponder a uma palavra-chave

1

Eu posso usar o sed para fazer recursivamente encontrar e substituir uma string em vários arquivos. Assim:

find -name  "*.py"  -not \( -name .svn -prune \) -type f -print0  | xargs
-0  sed -i 's/cat/dog/g'

No entanto, existe uma maneira de procurar uma string dentro de um arquivo e nos nomes reais dos arquivos?

Se a string for encontrada no nome de um arquivo, substitua a string no nome do arquivo por uma nova string.

Se a string estiver dentro do arquivo real, substitua a string por uma nova string.

E, claro, para pesquisar recursivamente.

Alguma idéia?

    
por Jamie 30.03.2012 / 16:42

1 resposta

2

Eu não sei como fazer isso de uma só vez, mas isso pode ser feito facilmente como um pequeno script, por exemplo (levemente testado):

find -name  "*.py"  -not \( -name .svn -prune \) -type f -print0 \
| while read -r -d $'
find -name  "*.py"  -not \( -name .svn -prune \) -type f -print0 \
| while read -r -d $'%pre%' filename; do
    sed -i 's/cat/dog/g' "$filename"
    echo "$filename" | grep -q "cat" \
    && mv "$filename" "${filename/cat/dog}"
  done
' filename; do sed -i 's/cat/dog/g' "$filename" echo "$filename" | grep -q "cat" \ && mv "$filename" "${filename/cat/dog}" done
    
por 26.04.2012 / 16:51