Aqui está uma maneira segura:
grep -lrIZ foo . | xargs -0 rm -f --
-l
imprime nomes de arquivos que correspondem ao padrão de pesquisa.
-r
realiza uma pesquisa recursiva para o padrão foo
no 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 -0
alimenta os nomes dos arquivos de grep
para rm -f
, separando as palavras por zero (nul) bytes (lembre-se da -Z
opçã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 Z
opçã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 ImportantStuff
que não desejo excluir e obsolete ImportantStuff
conter 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.