Você pode usar o GNU find
:
find * -regextype posix-extended \! -regex '.*[0-9]{8}.*' -prune
Se a data estiver sempre no final da sequência e precedida por .
, você também poderá usar o regex .*\.[0-9]{8}
, o que refletiria isso e reduziria o risco de arquivos excluídos incorretamente.
Como funciona:
-
-regextype posix-extended
seleciona um tipo de regex adequado para o regex abaixo -
\!
nega o significado da declaração que segue -
-regex '.*[0-9]{8}.*'
corresponde a qualquer arquivo que tenha oito dígitos consecutivos (isto é, uma data do formulário20150616
) -
-prune
impede quefind
liste os subdiretórios
Outra opção:
- Adicione a opção
-f
para listar apenas arquivos
EDITAR:
No AIX sem suporte para expressão regular em find
, você poderia usar o seguinte (usando o mecanismo de globalização padrão):
find * \! -name '*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*' -prune
Ou, se a data estiver sempre no final da string e precedida por um .
, o seguinte padrão poderá ser usado: *.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]
EDIT 2:
Se você quiser que os arquivos comecem com test
, use:
find * -prune -type f \! -name 'test*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
Se você não quiser usar a expansão de nome de arquivo pelo shell e não tiver um diretório adicional nesse diretório, também poderá usar:
find . -type f \! -name 'test*.[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'