localize ordem de classificação padrão do comando

23

qual é a ordem de classificação padrão para as entradas retornadas pelo comando linux find?

Por exemplo, se eu emitir

find . -type f -name '*mp3' 

e a saída consiste em vários arquivos em várias subpastas, qual é a ordem padrão na qual os diretórios são listados? Ao mesmo tempo, qual é a ordem de classificação na qual os arquivos de um diretório individual são listados?

Às vezes, ele retorna:

./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3

Veja como primeiro o conteúdo do diretório B está listado e, em seguida, o do diretório A. Ao mesmo tempo, dentro do diretório A, os arquivos são listados em uma ordem engraçada.

    
por Nasko 16.09.2010 / 15:24

3 respostas

13

find estará percorrendo a árvore de diretórios nos itens de ordem armazenados nas entradas de diretório. Isto será (principalmente) consistente de rodar para rodar, na mesma máquina e será essencialmente "ordem de criação de arquivo / diretório" se não houver exclusões.

No entanto, alguns sistemas de arquivos reordenarão as entradas de diretório como parte das operações de compactação ou quando o tamanho da entrada precisar ser expandido, portanto, sempre há uma pequena chance de que a ordem "bruta" mude com o tempo. Se você deseja um pedido consistente, alimente a saída por meio de um estágio de classificação extra.

    
por 16.09.2010 / 16:15
4

Você não deve confiar em uma ordem de saída específica de find e, em vez disso, deve usar sort e outros meios para controlar especificamente o pedido.

    
por 16.09.2010 / 16:00
1

Eu tenho trabalhado em UNIX / Linux desde 1984/1991, respectivamente, e o primeiro comando que me ensinaram foi encontrar. Linux / GNU colocou praticamente tudo que você precisa no comando find atual para brincar com ele.

Aqui estão algumas dicas úteis para classificar a saída do resultado. A opção -printf oferece muitas opções para permitir uma classificação mais complexa e a apresentação de informações sobre arquivos. É o melhor para problemas como este. Brinque com ele para ver o que funcionará para você. Usando -printf você pode personalizar e delimitar os resultados da maneira que quiser. Isso ajuda bastante quando você precisa registrar os resultados. Espero que isso ajude alguém.

  1. Se você usa -ls e deseja classificar por nome de arquivo, o 11º campo é o nome do arquivo para que você possa fazer o seguinte. A opção de tipo -k pode ter vários campos para classificar também.

    encontrar / caminho -ls | tipo -k11

  2. Se você quiser um controle de granulação mais fino, ou seja, ordenar por data / hora em ordem crescente ou decrescente, use a opção -printf "". Veja o manual para mais detalhes, mas o seguinte é um exemplo que será impresso com segundos fracionários, por isso é muito preciso.

EXEMPLO DATA / HORA: 2016-09-17 + 12: 09: 57.9013929800

find /path -printf "%T+ %p\n" | sort -n # Ascending

find /path -printf "%T+ %p\n" | sort -nr # Descending

Outra maneira de fazer isso sem caracteres na cadeia de data / hora é.

EXEMPLO DATA / HORA: 20160917120013.8101685040

find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n
    
por 17.09.2016 / 20:30