2012-03-18 27 views
5


Sto cercando di capire come ordinare un elenco di file per nome e dimensione.
Come faccio a ordinare per nome e dimensione del file utilizzando "du -a" e non visualizzare le directory?
Bash - Elenca e ordina i file e le loro dimensioni e per nome e dimensione

Utilizzando "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 

Come posso elencare tutti i file senza directory, aggiungere le dimensioni dei file, e ordinare i file nome, poi in base alle dimensioni?

Grazie per il vostro aiuto

+0

Vuoi ordinarlo per nome file? o percorso? – thekbb

risposta

18

È possibile utilizzare questo:

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

Spiegazione:

  • -type f per trovare i file solo
  • -printf per stampare l'output in specifici formato:
    • % f per stampare il file n ame
    • % s per stampare la dimensione del file
    • % p per stampare l'intero nome del file (ad es. con le cartelle principali) - è possibile omettere questo se si vuole

Poi attraversano specie che ordina nell'ordine di cui sopra (vale a dire il nome del file, quindi la dimensione del file, poi file percorso). L'uscita sarebbe qualcosa di simile (parte dell'output mostrato):

... 
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 
.... 

Spero che questo aiuti

+0

Grazie! Era esattamente ciò di cui avevo bisogno. – jao

+0

Cool, felice di aiutare! –

+0

Ottima risposta che mi ha aiutato anche. Grazie! – Tastybrownies

7

È possibile utilizzare il sort comando

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

ordina per secondo campo (nome), quindi il primo campo (dimensione) numericamente.

+0

Si noti che queste opzioni 'sort' (mutatis mutandis) sono richieste anche per il metodo' -printf'. Potresti anche voler rimuovere i campi, ad esempio, utilizzando 'cut' o alcuni di questi. – torek

+0

puoi '--max-depth = 1' a' du' per limitare solo la cartella corrente, ma continuerà ad elencare le cartelle ma non i suoi contenuti. –

1

Come le altre risposte finora, questo non è un problema di estrema importanza.

du praticamente insiste nel dirti sulle directory: se lo punti in una directory, quindi con o senza -a, te lo dirà.

Se avete la GNU du, però, si può dire che per leggere un elenco di nomi di file NUL-terminati da stdin, in modo da poter utilizzare find per produrre l'elenco: find ... -print0 | du --files0-from=- (non è necessario il flag -a Qui). (Se non si ha la possibilità --files0-from è ancora possibile richiamare du relativamente efficiente utilizzando xargs; vedere la documentazione xargs.)

Se avete GNU du, però, probabilmente avete GNU find, che ha -printf come descritto da @ icyrock.com. Basta usare quello.Quindi utilizzare un esplicito sort.

Problemi correlati