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'