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

Hoe kan ik bestanden vinden die groter/kleiner zijn dan x bytes?

Hoe kan ik in een terminal bestanden vinden die groter of kleiner zijn dan x bytes?

Ik veronderstel dat ik iets kan doen als

find . -exec ls -l {} \;

en dan het resultaat doorsturen naar awk om te filteren op bestandsgrootte. Maar zou er geen makkelijkere manier moeten zijn dan dit?

Antwoorden (4)

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

Gebruik:

find . -type f -size +4096c

om bestanden te vinden die groter zijn dan 4096 bytes.

en :

find . -type f -size -4096c

om bestanden te vinden die kleiner zijn dan 4096 bytes.

Let op het + en - verschil na de maatschakelaar.

De -size-schakelaar uitgelegd:

-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.
8
8
8
2015-10-25 22:03:31 +0000

Ik denk dat find alleen nuttig kan zijn zonder dat het naar AWK wordt geleid. Bijvoorbeeld,

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

De tilde geeft aan waar u wilt dat uw zoekopdracht begint en het resultaat moet alleen bestanden groter dan 2 kilobyte weergeven.

Om het mooi te maken, kunt u de optie -exec gebruiken om een ander commando uit te voeren, namelijk om deze mappen met hun grootte op te sommen.

Voor meer informatie, lees de man pagina voor find .

5
5
5
2010-10-29 00:01:20 +0000

AWK is echt heel gemakkelijk voor dit soort dingen. Hier zijn enkele dingen die je kunt doen met betrekking tot het controleren van de bestandsgrootte, zoals je vroeg:

Lijst bestanden groter dan 200 bytes:

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

Lijst bestanden kleiner dan 200 bytes en schrijf de lijst naar een bestand:

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

Lijst bestanden van 0 bytes, neem de lijst op in een bestand en verwijder de lege bestanden:

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

Meer dan 2000 bytes:

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

Minder dan 2000 bytes:

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