Para obter conselhos genéricos sobre o processamento de nomes de arquivos potencialmente contendo espaços, consulte Por que meu script de shell sufoca em espaços em branco ou outros caracteres especiais?
A dificuldade com o que você está tentando fazer é que não há uma boa maneira de listar os N arquivos mais recentes com ferramentas padrão.
A maneira mais fácil de fazer o que você está fazendo aqui é usar zsh como seu shell. Ele tem qualificadores para classificar arquivos por data. Para executar file nos 500 arquivos mais recentes:
file *(om[1,500])
Com o utilitário file do Linux, passe a opção -i ou --mime-type para obter uma saída mais fácil de analisar. Os arquivos de imagem são identificados por linhas que terminam com image/something .
file --mime-type *(om[1,500]) | sed -n 's~: *image/[^ ]*$~~p'
Se você precisar lidar com absolutamente todos os nomes de arquivos, incluindo aqueles com uma nova linha em seus nomes, use a opção -0 para saída delimitada por nulo. Versões recentes do GNU sed podem usar bytes nulos como o delimitador de registro em vez de novas linhas.
file --mime-type -- *(om[1,500]) | sed -zn 's~: *image/[^ ]*$~~p'
Se você não tiver zsh, poderá usar ls e lidar com nomes de arquivos que contenham espaços, mas não com linhas novas ou espaços à direita, passando a opção -L1 para file . Isso invocou file em um arquivo por vez, então é um pouco mais lento.
ls -t | head -n 500 | xargs -L1 file --mime-type -- | sed -n 's~: *image/[^ ]*$~~p'