O comando find a seguir remove diretórios cujos nomes contêm .svn , Embora não caia no diretório, o nome do caminho removido é impresso ... ( -name '*.svn' é o causa!) ..
Você pode filtrar os nomes dos diretórios por meio de: grep -d skip , que silenciosamente ignora esses "nomes de diretório" de entrada.
Com o GNU grep, você pode usar -H em vez de /dev/null .
Como um problema secundário: \+ pode ser muito mais rápido que \; , por exemplo. para 1 milhão de arquivos de uma linha, usando \; , 4m20s , usando \+ , foi necessário apenas 1.2s .
O método a seguir usa xargs em vez de -exec e supõe que não há novas linhas de código \n em nenhum dos seus nomes de arquivos . Conforme usado aqui, xargs é praticamente o mesmo que \+ de find.
xargs pode passar nomes de arquivos que contêm espaços consecutivos alterando o delimitador de entrada para '\n' com a opção -d .
Isso exclui diretórios cujos nomes contêm .svn e greps apenas arquivos que não terminam com .html .
find . \( -name '*.svn*' -prune -o ! -name '*.html' \) |
xargs -d '\n' grep -Hd skip 'SearchString'