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


237

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

Suppongo di poter fare qualcosa del genere

find . -exec ls -l {} \;

e quindi reindirizzare il risultato awkal filtro per dimensione del file. Ma non dovrebbe esserci un modo più semplice di questo?

Risposte:


377

Uso:

find . -type f -size +4096c

per trovare file di dimensioni superiori a 4096 byte.

E :

find . -type f -size -4096c

per trovare file di dimensioni inferiori a 4096 byte.

Notare la differenza + e - dopo il cambio di dimensione.

L' -sizeinterruttore ha spiegato:

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

11
@Jay: da man find all'inizio della sezione "Test": "Gli argomenti numerici possono essere specificati come + n per maggiore di n, -n per minore di n, n per esattamente n."
Dennis Williamson,

4
La pagina man la menziona verso l'alto e descrive che + e - possono applicarsi a tutti gli switch che accettano argomenti numerici ('n'), incluso il significato di + e -. (Cerca i TEST nella pagina man per trovare l'inizio della sezione in cui è descritto)
Slartibartfast,

1
@Dennis Williamson: strano, + e - funzionano in OS X, ma la pagina man non ha la sezione TEST. Infatti, manca un grosso pezzo rispetto al tuo link, mancano TEST, AZIONI, OPERATORI, tra gli altri.
gatto del soffitto,

1
Sembra che la versione GNU della pagina man abbia la sezione "Test", ma la versione BSD no. linuxmanpages.com/man1/find.1.php
Jay,

8
Ho appena scoperto che le pagine man di BSD descrivono la cosa +/-. Si fa strada alla fine della sezione "Primarie". - Tutte le primarie che accettano un argomento numerico consentono al numero di essere preceduto da un segno più (“+”) o da un segno meno (“-”). Un segno più precedente significa "più di n", un segno meno precedente significa "meno di n" e nessuno dei due significa "esattamente n"
Jay,

7

Penso che findpotrebbe essere utile da solo senza eseguire il piping su AWK. Per esempio,

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

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

Per renderlo fantasioso, puoi usare l' -execopzione per eseguire un altro comando che è quello di elencare queste directory con le loro dimensioni.

Per ulteriori informazioni, leggere la pagina man perfind .


4

AWK è davvero abbastanza facile per questo genere di cose. Ecco alcune cose che puoi fare con esso in relazione al controllo della dimensione del file, come hai chiesto:

Elenca i file maggiori di 200 byte:

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

Elenca i file meno di 200 byte e scrivi l'elenco in un file:

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

Elenca i file di 0 byte, registra l'elenco in un file ed elimina i file vuoti:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm


Qual è la differenza tra il piping teee il semplice reindirizzamento a un file, come ls -l > filelog(o ls -l >> filelog)?
OmarOthman,

3

Superiore a 2000 byte:

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

Meno di 2000 byte:

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

Questo è male poiché du dà lo spazio sul disco occupato. Non corrisponde alla dimensione del file. ad esempio, se si dispone di un file system compresso (btrfs / zfs), du otterrà un risultato diverso da ls, che mostra la dimensione effettiva decompressa.
chris scott,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.