2010-10-28 23:09:03 +0000 2010-10-28 23:09:03 +0000
241
241

Come posso trovare file più grandi/più piccoli di x byte?

In un terminale, come posso trovare file più grandi o più piccoli di x byte?

Suppongo di poter fare qualcosa come

find . -exec ls -l {} \;
``` &001 


e poi intubare il risultato a [ `awk` ](http://en.wikipedia.org/wiki/AWK) per filtrare per dimensione del file. Ma non dovrebbe esserci un modo più semplice di questo?

Risposte (4)

386
386
386
2010-10-28 23:37:50 +0000

Utilizzare:

find . -type f -size +4096c
``` ```
find . -type f -size -4096c

per trovare file più grandi di 4096 byte.

E :

-size n[cwbkMG]

    File uses n units of space. The following suffixes can be used:

    `b' for 512-byte blocks (this is the default if no suffix is
                                used)

    `c' for bytes

    `w' for two-byte words

    `k' for Kilobytes (units of 1024 bytes)

    `M' for Megabytes (units of 1048576 bytes)

    `G' for Gigabytes (units of 1073741824 bytes)

    The size does not count indirect blocks, but it does count
    blocks in sparse files that are not actually allocated. Bear in
    mind that the `%k' and `%b' format specifiers of -printf handle
    sparse files differently. The `b' suffix always denotes
    512-byte blocks and never 1 Kilobyte blocks, which is different
    to the behaviour of -ls.
``` &001 


per trovare file più piccoli di 4096 byte. 


Notare la differenza + e - dopo lo switch di dimensione. 


Lo switch `-size` spiegato: 


&001 &001
8
8
8
2015-10-25 22:03:31 +0000

Penso che find potrebbe essere utile da solo, senza bisogno di tubazioni per la AWK. Per esempio,

find ~ -type f -size +2k -exec ls -sh {} \;
``` &001 


La tilde indica dove si vuole che la ricerca inizi e il risultato dovrebbe visualizzare solo file superiori a 2 kilobyte. 


Per renderla più fantasiosa, si può usare l'opzione `-exec` per eseguire un altro comando che è quello di elencare queste directory con le loro dimensioni. 


Per ulteriori informazioni, leggere la [ man page for `find` ](http://man7.org/linux/man-pages/man1/find.1.html).
5
5
5
2010-10-29 00:01:20 +0000

AWK è davvero abbastanza facile per questo genere di cose. Ecco alcune cose che potete fare con esso in relazione al controllo delle dimensioni dei file, come avete chiesto:

Elencare file superiori a 200 byte:

ls -l | awk '{if ($5 > 200) print $8}'

Elencare file inferiori a 200 byte e scrivere la lista su un file:

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog

Elencare file di 0 byte, registrare la lista su un file e cancellare i file vuoti:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm
3
3
3
2010-10-28 23:27:11 +0000

Superiore a 2000 byte:

du -a . | awk '$1*512 > 2000 {print $2}'

Meno di 2000 byte:

du -a . | awk '$1*512 < 2000 {print $2} '