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 wc
proceso 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 -c
genera 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. sort
obtiene 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 cut
utiliza 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 -l
en 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
-ls
activar 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á
sort
una clasificación numérica en la séptima columna (tamaño de archivo) - Elimina
awk
todos los demás campos y solo imprime el nombre del archivo.