Caro Jorge,
vou aproveitar a sua dúvida para dar uma dica para a lista:
=====
Sempre que vc pensar em usar um cmd cat dentro de um script, repense, pois deve ser desnecessário
=====
É muito frequente fazermos coisas do tipo cat ARQ | CMD. 99% das vezes o CMD aceita ARQ como parâmetro. P.ex.:
Troque: cat ARQ | grep CADEIA
Por: grep CADEIA ARQ
Troque: cat ARQ | cut PARMS
Por: cut PARMS ARQ
Onde: PARMS = -d, -f, -s, ...
Tb é comum, em cmds que só aceitam os dados de ARQ vindos pela entrada primária, vermos o tal do cat desnecessário. P.ex.:
Troque: cat ARQ | tr X Y
Por: tr X Y < ARQ
Veja isso:
$ wc -l ARQ
4 ARQ
Normalmente vc só quer a qtd de linhas, não importa o nome. Então para ludibriar o cmd e ele não sabero o nome do arquivo vc faz:
$ cat ARQ | wc -l
4
Aconteceu o que vc queria, mas vc pode fazer o mesmo de forma bem mais otimizada, fazendo:
$ wc -l < ARQ
4
O shell passará somente os dados de ARQ para o wc contar e ele não saberá o nome do arquivo para listar.
Jamais se esqueça que o pipe é tremendamente útil, mas ele cria um fork, gerando um subshell.
Recomendo que, à luz do que expliquei, vc façam:
$ grep -l cat /diretorio/dos/meus/scripts/*
Isso irá gerar o nome de todos os seus scripts que usam o cmd cat. Analise um por um e vc verá que existe muita coisa que pode ser otimizada.
Agora, voltando à dúvida do Jorge, que a essa altura já deve ter descartado o uso do cat. Jorge o seu find pode ser otimizado para o seguinte formato:
find . type f -iname \*.jpg -o -iname \*.jpeg -o -iname \*.bmp -o -iname \*.png -o -iname \*.gif
ou, mais facilmente:
find . -type f -iregex '.*\(jpg\|jpeg\|png\|gif\)'