2012-03-18 23 views
5


Estoy tratando de encontrar la forma de ordenar una lista de archivos por nombre y tamaño.
¿Cómo puedo ordenar por nombre y tamaño de archivo con "du -a" y no mostrar los directorios?
Bash - Listar y ordenar archivos y sus tamaños y por nombre y tamaño

El uso de "du -a"

1 ./locatedFiles 
0 ./testDir/j.smith.c 
0 ./testDir/j.smith 
1 ./testDir/sampleFunc/arrays 
2 ./testDir/sampleFunc 
0 ./testDir/j.smith.txt 
0 ./testDir/testing 
0 ./testDir/test2 
0 ./testDir/test3 
0 ./testDir/test1 
0 ./testDir/first/j.smith 
0 ./testDir/first/test 
1 ./testDir/first 
1 ./testDir/second 
1 ./testDir/third 
6 ./testDir 

¿Cómo puedo obtener una lista de todos los archivos sin directorios, añadir archivos de tamaños, y ordenar por los nombres de archivos primero, y luego por tamaño?

Gracias por su ayuda

+0

¿Lo quiere ordenado en el nombre de archivo? o camino? – thekbb

Respuesta

18

Puede utilizar esta:

find -type f -printf "%f %s %p\n"|sort 

Explicación:

  • type f para encontrar archivos sólo
  • -printf para imprimir la salida en concreto formato:
    • % f para imprimir el archivo n ame
    • % s para imprimir el tamaño del archivo
    • % p para imprimir el nombre completo del archivo (es decir con las carpetas principales) - se puede omitir esta opción si desea

A continuación, ejecute a través de una especie que ordena en el orden dado anteriormente (es decir, nombre de archivo, a continuación, el tamaño de archivo, a continuación, presentar ruta). La salida sería algo como esto (parte de la salida que se muestra):

... 
XKBstr.h 18278 ./extensions/XKBstr.h 
XlibConf.h 1567 ./XlibConf.h 
Xlib.h 99600 ./Xlib.h 
Xlibint.h 38897 ./Xlibint.h 
Xlocale.h 1643 ./Xlocale.h 
xlogo11 219 ./bitmaps/xlogo11 
.... 

Esperanza esto ayuda

+0

¡Gracias! Eso era exactamente lo que necesitaba. – jao

+0

¡Genial, me alegro de ayudar! –

+0

Excelente respuesta que también me ayudó. ¡Gracias! – Tastybrownies

7

Usted puede utilizar el comando sort

$ find -type f -printf $'%s\t%f\n' | sort -k2,2 -k1,1n 

ordenar por segundo campo (nombre), luego primer campo (tamaño) numéricamente.

+0

Tenga en cuenta que estas opciones de 'clasificación' (mutatis mutandis) también son necesarias para el método '-printf'. También es posible que desee eliminar campos, por ejemplo, usando 'cortar' o algo así. – torek

+0

puede '--max-depth = 1' a' du' restringir solo a la carpeta actual, pero seguirá mostrando carpetas pero no su contenido. –

1

Como las otras respuestas dicen hasta ahora, este no es realmente un problema de bash.

du prácticamente insiste en informarte sobre directorios: si lo apunta a un directorio, entonces con o sin -a se lo contará.

Si usted tiene la GNU du, sin embargo, se puede decir que a leer una lista de nombres de archivo terminadas en nulo que desde la entrada estándar, por lo que puede utilizar para producir find la lista: find ... -print0 | du --files0-from=- (que no es necesario la bandera -a aquí). (Si no tiene la opción --files0-from todavía puede invocar du relativamente eficiente utilizando xargs; consulte la documentación xargs.)

Si tiene GNU du, sin embargo, es probable que tenga GNU find, que tiene la forma descrita por -printf @ icyrock.com. Solo usa eso.Luego use un sort explícito.

Cuestiones relacionadas