Aqui está uma maneira segura:
grep -lrIZ foo . | xargs -0 rm -f --
-
-limprime os nomes dos arquivos que correspondem ao padrão de pesquisa. -
-rrealiza uma pesquisa recursiva para o padrãofoono diretório fornecido.. Se isso não funcionar, tente-R. -
-I(capitali) faz com que arquivos binários, como PDFs, sejam ignorados. -
-Zgarante que os nomes dos arquivos sejam zero- (isto é, nul-) terminados, de modo que um nome contendo espaço em branco não seja interpretado de maneira errada (ou seja, como vários nomes em vez de um). -
xargs -0alimenta os nomes dos arquivos degreparm -f, separando palavras por zero (nul) bytes (lembre-se da opção-Zdegrep). -
--é 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ê quiser ver quais arquivos estão prestes a serem excluídos, basta remover a parte | xargs -0 rm -f -- e deixar a opção Z em 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 ImportantStuff que não desejo excluir e obsolete ImportantStuff contendo foo , perco ImportantStuff (e não obsolete ImportantStuff !) quando eu corro este comando, porque $files é quebrado em espaços quando é interpretado. É perigoso colocar uma lista de nomes de arquivos em uma variável de shell escalar dessa maneira.