Para a sua versão -name
, em vez de ! -name '*[done]*'
você precisa de ! -name '*\[done\]*'
- caso contrário, as letras ficam entre colchetes como um conjunto de caracteres, excluindo assim qualquer coisa que inclua a letra "d" ou "o" ou " n "ou" e "(e todos os seus nomes de arquivos contêm" e "). Você estava, então, negando essa condição uma segunda vez, de modo que, em vez de excluir todos os arquivos, ela incluísse todos os arquivos, mas uma versão corrigida seria:
find * \( -name '*.mkv' -o -name '*avi' -o -name '*mp4' -o -name '*flv' -o -name '*ogg' -o -name '*mov' \) \( ! -name '*\[done\]*' \) -print
Sua versão regex está incorreta porque você tem o $
imediatamente após o padrão correspondente a [done]
, mas no seu nome real ainda existe uma extensão de arquivo após esse ponto, mas adicionando um .*
antes do $
funciona.
find * \( -name '*.mkv' -o -name '*avi' -o -name '*mp4' -o -name '*flv' -o -name '*ogg' -o -name '*mov' \) ! \( -regex '.*\(\[done\]\).*$' \) -print