
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 find
comando.
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 -maxdepth
primá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 -l
significa listar apenas nomes de arquivos
[07]
significa 0 ou 7
xargs
faz 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