Como escrever um wrapper para encontrar?

0

Estou fazendo processamento de texto em um conjunto de arquivos, e isso implica em executar a localização neles e ignorar (e remover) alguns diretórios, como

find . -name '*.php' -not \( -path ./.git -prune -o -path ./.idea -prune \) -exec sed -E -i 's/function_call/refactored_function/g' {} '+'

A coisa é a primeira parte do comando (comutadores como -name , -iname , -type e quais não) (antes do -not ) e o exec pode mudar, e find é bastante estrito em seus parâmetros. Então, como posso escrever um wrapper para encontrar que me permita escrever:

otherfind . -name '*.php' -exec sed -E -i 's/function_call/refactored_function/g' {} '+'

E isso será corretamente -not \( -path ./.git -prune -o -path ./.idea -prune \) ?

    
por Pierre Antoine Guillaume 23.02.2018 / 11:51

1 resposta

2

Em vez de lembrar como obter find para ignorar arquivos com os quais você não se importa ou usá-los, use git grep :

git grep -z -l function_call -- \*.php |
xargs -0 sed -E -i 's/function_call/refactored_function/g'

Isso procurará function_call em todos os arquivos com extensão .php , ignorando os arquivos ignorados (conforme definido em .gitignore ) e o diretório .git e os transmitirá para xargs para processamento. As opções -z e -0 usam caracteres nulos para separar nomes de arquivos.

    
por 23.02.2018 / 11:59

Tags