Usando um padrão de globbing estendido em bash
:
rm ./!(*999*)
Isso requer que shopt -s extglob
esteja habilitado. O padrão !(*999*)
corresponderá a qualquer nome no diretório atual, exceto os nomes correspondentes a *999*
.
Para se preocupar apenas com arquivos regulares (não diretórios, etc.):
for name in ./!(*999*); do [ -f "$name" ] && rm "$name"; done
Seu primeiro comando não funcionará, pois grep
irá procurar dentro dos arquivos. Ele removeria todos os arquivos que possuem linhas sem 999
(você adicionou a opção --null
para que funcione com xargs -0
).
Seu segundo comando não funcionará, pois grep
no macOS não suporta --null-data
(ele tem, no entanto, uma opção --null
, mas apenas para gerar a saída do nome do arquivo). Observe também que ele procuraria 999
em qualquer lugar no caminho do arquivo (incluindo os componentes do diretório), não apenas o nome do arquivo.