Ordene todos los archivos de texto por tamaño, generando una lista de rutas de texto

Ordene todos los archivos de texto por tamaño, generando una lista de rutas de texto

Esto me da una lista de rutas a todos los archivos de texto:

find / -type f -name '*.txt' > ~/Desktop/sorted.txt

Me gustaría ordenar esta lista de rutas según el tamaño de archivo de cada elemento, pero no estoy seguro de qué usar. Esto no funciona como esperaba:

find / -type f -name '*.txt' |sort -S > ~/Desktop/sorted.txt

¿Alguna sugerencia?

Respuesta1

Este comando utiliza un wcproceso independiente para cada archivo coincidente, por lo que su rendimiento puede ser deficiente. Lo creé teniendo en cuenta la compatibilidad y el cumplimiento de POSIX.

find / -type f -name '*.txt' -exec wc -c {} \; | sort -t ' ' -n -k 1,1 | cut -d ' ' -f 2-

Cada uno wc -cgenera una línea en un formulario.

12345 /path/to/file/possibly with spaces/foo.txt

donde el primer espacio separa el recuento de bytes de la ruta. sortobtiene todas las líneas, utiliza el carácter de espacio como separador de campos y ordena numéricamente según el primer campo, es decir, según el recuento de bytes. Luego cututiliza el carácter de espacio como delimitador de campo e imprime desde el segundo campo, es decir, todo menos el primer campo, es decir, todo menos el byte cuenta, es decir, las rutas.

La solución se puede adaptar fácilmente para ordenar por número de líneas: simplemente use wc -len lugar de wc -c.


Nota:
Una ruta que contenga uno o más caracteres de nueva línea romperá mi código. Para que el código sea inmune a esto, se podrían utilizar herramientas que admitan caracteres nulos como delimitadores. Con las herramientas POSIX esto es difícil, si es que es posible. Esta respuesta se concentra en la portabilidad, por lo que es de esperar que todas las rutas a sus archivos de texto sean "agradables".

Respuesta2

Siempre puedes optar por el enfoque (probablemente subóptimo) de encadenar herramientas:

find / -type f -name '*.txt' -ls  | sort -nk7,7 | awk '{print $NF;}'
  • Al -lsactivar Buscar se mostrarán varias columnas adicionales, incluido el tamaño del archivo (en el conjunto de herramientas GNU, la séptima columna puede ser diferente en MacOS).
  • Hará sortuna clasificación numérica en la séptima columna (tamaño de archivo)
  • Elimina awktodos los demás campos y solo imprime el nombre del archivo.

información relacionada