Aqui está uma maneira segura:
grep -lrIZ foo . | xargs -0 rm -f --
-l imprime nomes de arquivos que correspondem ao padrão de pesquisa.
-rrealiza uma pesquisa recursiva para o padrão foono diretório especificado .. Se isso não funcionar, tente -R.
-I(capital i) faz com que arquivos binários como PDFs sejam ignorados.
-Z garante que os nomes dos arquivos sejam zerados (ou seja, nul-), para que um nome contendo espaço em branco não seja interpretado da maneira errada (ou seja, como vários nomes em vez de um).
xargs -0alimenta os nomes dos arquivos de greppara rm -f, separando as palavras por zero (nul) bytes (lembre-se da -Zopção de grep).
--é frequentemente esquecido, mas é muito importante marcar o final das opções e permitir a remoção de arquivos cujos nomes começam com -.
Se você deseja ver quais arquivos estão prestes a serem excluídos, remova a | xargs -0 rm -f --peça e deixe a Zopção para grep.
Outro usuário sugeriu algo como o seguinte, que você não deve executar porque não é seguro:
files=`grep foo * | cut -d: -f1`
rm -f $files # unsafe, do not run it!
Se eu tiver arquivos ImportantStuffque não desejo excluir e obsolete ImportantStuffconter foo, perco ImportantStuff(e não obsolete ImportantStuff !) Quando executo esse comando, porque $filesé desmembrado em espaços quando é interpretado. É perigoso colocar uma lista de nomes de arquivos em uma variável de shell escalar dessa maneira.