Lista de arquivos em um diretório em ordem de nome

6

Eu queria uma lista de arquivos em um diretório em ordem de nome para passar para um visualizador de imagens.

Estou usando find $PHOTODIR -iname "*.jpg" . Infelizmente isso produz as imagens fora de ordem.

Em uma chave USB (formatada em FAT32) eu poderia entender que os arquivos são processados na ordem das entradas de diretório, então copiei para uma unidade Ext4, que eu pensei que produziria arquivos na ordem dos nomes, mas ainda há problemas; Eu acho que eles estão na ordem inode.

ls lista em ordem, mas preciso de caminhos relativos.

Alguém pode sugerir um roteiro adequado?

    
por Milliways 11.09.2013 / 09:54

1 resposta

9

Se por "ordem de nome" você quer dizer uma simples ordenação alfabética, você poderia apenas sort os find results, o que funciona bem contanto que os arquivos não contenham uma nova linha no nome:

find "$PHOTODIR" -iname "*.jpg" | sort

Se você quiser passar esses argumentos para um visualizador de imagens ou para qualquer outro comando, será necessário direcioná-los para xargs . Isso funciona fora da caixa, desde que não haja espaços em branco nos nomes ou caminhos dos arquivos.

Se você quiser que isso funcione com qualquer nome ou caminho de arquivo, use o argumento -print0 para tornar a saída de find delimitada por caracteres NUL, classifique com -z e use xargs -0 :

find "$PHOTODIR" -iname "*.jpg" -print0 | sort -z | xargs -0 <command>
    
por 11.09.2013 / 10:03