Sua lógica é falha: com o comando que você tem agora, você encontra todos os arquivos que não são .svg
ou todos os arquivos que não são .jpg
. O que você escreveu é como:
find (everything that's not an SVG or everything that's not a JPG)
Então você obterá os arquivos JPG, porque find
já avaliou a primeira parte e deu a você tudo o que não é um arquivo SVG. Devido à maneira como as opções são analisadas, se a primeira parte de uma expressão or
for avaliada como true, a segunda parte nem será analisada.
Em essência, uma vez que find
lhe devolve tudo o que não é um SVG, não se importa com o que você deseja com os arquivos JPG.
A maneira correta de expressar isso seria com um lógico and
:
find . \( ! -iname '*.svg' -a ! -iname '*.jpg' \)
Isto diz:
find (everything that's not an SVG and everything that's not a JPG)
Ou, negando toda a expressão:
find . ! \(-iname '*.svg' -o -iname '*.jpg' \)
Qual lê como:
find everything that's not (an SVG or a JPG)
Observe que você pode ignorar o *
se simplesmente colocá-lo entre aspas simples ou duplas, por exemplo, %código%. Isso é muito mais fácil de ler.