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'