Se você deseja excluir todos os arquivos cujos nomes correspondem a um determinado formulário, um curinga (padrão glob) é a solução mais direta. Alguns exemplos:
$ rm -f abc.log.* # Remove them all
$ rm -f abc.log.2012* # Remove all logs from 2012
$ rm -f abc.log.2012-0[123]* # Remove all files from the first quarter of 2012
As expressões regulares são mais poderosas do que os curingas; você pode alimentar a saída de greppara rm -f. Por exemplo, se alguns dos nomes de arquivo começam com "abc.log"e alguns com "ABC.log", greppermite fazer uma correspondência sem distinção entre maiúsculas e minúsculas:
$ rm -f $(ls | grep -i '^abc\.log\.')
Isso causará problemas se algum dos nomes de arquivo contiver caracteres engraçados, incluindo espaços. Seja cuidadoso.
Quando faço isso, executo o ls | grep ...comando primeiro e verifico se ele produz a saída que desejo - especialmente se estiver usando rm -f:
$ ls | grep -i '^abc\.log\.'
(check that the list is correct)
$ rm -f $(!!)
onde se !!expande para o comando anterior. Ou posso digitar seta para cima ou Ctrl-P e editar a linha anterior para adicionar o rm -fcomando.
Isso pressupõe que você está usando o shell bash. Alguns outros shells, particularmente csh e tcsh e alguns shells derivados de sh mais antigos, podem não suportar a $(...)sintaxe. Você pode usar a sintaxe de crase equivalente:
$ rm -f `ls | grep -i '^abc\.log\.'`
A $(...)sintaxe é mais fácil de ler e, se você for realmente ambicioso, pode ser aninhada.
Finalmente, se o subconjunto de arquivos que você deseja excluir não pode ser facilmente expresso com uma expressão regular, um truque que costumo usar é listar os arquivos em um arquivo de texto temporário e, em seguida, editá-lo:
$ ls > list
$ vi list # Use your favorite text editor
Posso então editar o listarquivo manualmente, deixando apenas os arquivos que desejo remover e, em seguida:
$ rm -f $(<list)
ou
$ rm -f `cat list`
(Novamente, isso pressupõe que nenhum dos nomes de arquivo contém caracteres engraçados, especialmente espaços.)
Ou, ao editar o listarquivo, posso adicionar rm -f no início de cada linha e então:
$ . ./list
ou
$ source ./list
Editar o arquivo também é uma oportunidade para adicionar cotações quando necessário, por exemplo, mudar rm -f foo barpara rm -f 'foo bar'.