Remova arquivos contendo determinados caracteres

Remova arquivos contendo determinados caracteres

Eu tenho uma lista de arquivos em um diretório e preciso remover todos os arquivos que contenham 0 ou 7. Sinto que preciso usar o grep, mas não tenho muita certeza. Alguma ideia?

Responder1

O que você deseja fazer é avaliar seus arquivos de acordo com um teste condicional específico e executar uma ação em cada arquivo de acordo com o resultado do teste condicional. Este é o propósito exato do findcomando.

Aqui está um portátil (Compatível com POSIX) comando para remover arquivos regulares cujo conteúdo inclui "0" ou "7":

find . -type f -exec grep -q '[07]' {} \; -exec rm {} +

Observe queesserecursivamentepesquisa o diretório atual.

Se não é isso que você deseja, você pode verificar se o -maxdepthprimário está disponível (nesse caso, você também pode usar o primário -delete; nenhum deles é especificado pelo POSIX):

find . -maxdepth 1 -type f -exec grep -q '[07]' {} \; -delete

Ou você pode aplicar as técnicas fornecidas em:

Responder2

grep -l '[07]' DirToYourFiles/* | xargs rm -f

grep -lsignifica listar apenas nomes de arquivos

[07]significa 0 ou 7

xargsfaz deles um comando.

Isso pressupõe que os nomes dos arquivos não contenham caracteres em branco, nova linha, aspas simples, aspas duplas ou barras invertidas. Com utilitários GNU, você pode torná-lo mais confiável com:

grep -lZ '[07]' DirToYourFiles/* | xargs -r0 rm -f

informação relacionada