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 em que os diretórios estão listados? Ao mesmo tempo, qual é a ordem de classificação na qual os arquivos em um diretório individual são listados?
Às vezes retorna:
./B/01.mp3
./A/01.mp3
./A/04.mp3
./A/02.mp3
Veja como primeiro o conteúdo do diretório B é listado, depois o do diretório A. Ao mesmo tempo, no diretório A, os arquivos são listados em uma ordem engraçada.
-s
parâmetro para classificar alfabeticamente a saída.Respostas:
find
percorrerá a árvore de diretórios na ordem em que os itens são armazenados nas entradas do diretório. Isso (principalmente) será consistente de execução para execução, na mesma máquina e será essencialmente "ordem de criação de arquivos / diretórios" se não houver exclusões.No entanto, alguns sistemas de arquivos solicitarão novamente as entradas do diretório como parte das operações de compactação ou quando o tamanho da entrada precisar ser expandido, portanto, sempre haverá uma pequena chance de a ordem "bruta" mudar ao longo do tempo. Se você deseja um pedido consistente, alimente a saída através de um estágio de classificação extra.
fonte
find /path/ -exec ...
execução lenta, com muito mais rapidez,find /path/
para obter primeiro a lista classificada de arquivos.Você não deve confiar em uma ordem de saída específica
find
e deve usarsort
outros meios para controlar especificamente a ordem.fonte
Trabalho no UNIX / Linux desde 1984/1991, respectivamente, e o primeiro comando que aprendi foi encontrar. O Linux / GNU colocou praticamente tudo o que você precisa no comando find atual, para brincar com ele.
Aqui estão algumas dicas úteis para classificar a saída de localização. A opção -printf oferece várias opções para ativar a classificação mais complexa e a apresentação de informações do arquivo. É 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 desejar. Isso ajuda bastante quando você precisa postar os resultados do processo. Espero que isso ajude alguém.
Se você usar -ls e quiser classificar por nome do arquivo, o 11º campo será o nome do arquivo, para que você possa fazer o seguinte. A opção sort -k também pode usar vários campos para classificar.
encontre / caminho -ls | ordenar -k11
Se você deseja um controle de granulação mais fina por ordem de data / hora em ordem crescente ou decrescente, use a opção -printf "". Consulte o manual para obter mais detalhes, mas a seguir é apresentado um exemplo que será impresso com segundos fracionários, para que seja muito preciso.
EXEMPLO DATA / HORA: 17-09-2016 + 12: 09: 57.9013929800
Outra maneira de fazer isso sem caracteres na cadeia de data / hora é.
EXEMPLO DATA / HORA: 20160917120013.8101685040
fonte