Solución 1:
find
recorrerá el árbol de directorios en el orden en que se almacenan los elementos dentro de las entradas del directorio. Esto (en su mayoría) será consistente de una ejecución a otra, en la misma máquina y será esencialmente "orden de creación de archivos/directorios" si no ha habido eliminaciones.
Sin embargo, algunos sistemas de archivos reordenarán las entradas del directorio como parte de las operaciones de compactación o cuando el tamaño de la entrada deba expandirse, por lo que siempre existe una pequeña posibilidad de que el orden "en bruto" cambie con el tiempo. Si desea un pedido consistente, pase la salida a través de una etapa de clasificación adicional.
Solución 2:
No debe confiar en un orden de salida particular de find
y en su lugar debería usar sort
y otros medios para controlar específicamente el pedido.
Solución 3:
He estado trabajando en UNIX/Linux desde 1984/1991 respectivamente y el primer comando que me enseñaron fue find. Linux/GNU ha puesto casi todo lo que necesita en el comando de búsqueda actual, así que juegue con él.
Estos son algunos consejos útiles para ordenar la salida de búsqueda. La opción -printf le brinda muchas opciones para permitir una clasificación más compleja y una presentación de información de archivos. Es lo mejor para problemas como este. Juega con él para ver qué funcionará para ti. Usando -printf puede personalizar y delimitar los resultados de la forma que desee. Esto ayuda bastante cuando necesita procesar los resultados posteriormente. Espero que esto ayude a alguien.
-
Si usa -ls y desea ordenar por nombre de archivo, el campo 11 es el nombre del archivo, por lo que puede hacer lo siguiente. La opción sort -k también puede tomar múltiples campos para ordenar.
encontrar /ruta -ls | ordenar -k11
-
Si desea un control de grano más fino, es decir, ordenar por fecha/hora en orden ascendente o descendente, use la opción -printf "". Consulte el manual para obtener más detalles, pero el siguiente es un ejemplo que se imprimirá con fracciones de segundo, por lo que es muy preciso.
EJEMPLO FECHA/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
Otra forma de hacer esto sin caracteres en la cadena de fecha/hora es.
EJEMPLO FECHA/HORA:20160917120013.8101685040
find /path -printf "%AY%Am%Ad%AH%AM%AS %p\n" | sort -n