Seu problema é a -L mudar para grep .
Na página do manual:
L, --files-without-match
Suppress normal output; instead print the name of each input file from which no output would normally have been printed. The scanning will stop on the first match.
Portanto, em vez de listar os nomes de arquivos que não correspondem a avi , ele lista apenas o lugar em que grep não encontrou avi . Como grep geralmente procura em um arquivo, esse switch listaria nomes de arquivos que não continham o padrão avi dentro deles. No seu caso, no entanto, como você está direcionando para grep de find , o arquivo que grep está lendo é (standard input) . Para ver o que quero dizer, tente:
find /media/mathscd | grep -L "*.avi"
resultado:
(standard input)
Em outras palavras, grep encontrou linhas que não correspondem a "*.avi" na entrada padrão, que é exatamente o que aconteceu.
Como find lista nomes de arquivos diretamente, você só precisa inverter o sentido da correspondência:
find /media/mathscd | grep -v ".*\.avi"
(observe que os padrões grep são diferentes dos curingas do shell; você também não precisa da opção -r )
Além disso, usando find sozinho:
find /media/mathscd ! -name "*.avi"