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"