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

Wie kann ich Dateien finden, die größer/kleiner als x Bytes sind?

Wie kann ich in einem Terminal Dateien finden, die größer oder kleiner als x Bytes sind?

Ich nehme an, ich kann etwas wie

find . -exec ls -l {} \;

tun und das Ergebnis dann über die Pipeline an awk weiterleiten, um nach Dateigröße zu filtern. Aber sollte es nicht einen einfacheren Weg als diesen geben?

Antworten (4)

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

Verwenden Sie:

find . -type f -size +4096c

, um Dateien zu finden, die größer als 4096 Bytes sind.

Und :

find . -type f -size -4096c

, um Dateien zu finden, die kleiner als 4096 Bytes sind.

Beachten Sie den + und - Unterschied nach der Größenumschaltung.

Die -size-Umschaltung erklärt:

-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

Ich denke, dass find allein ohne Rohrleitungen zum AWK nützlich sein könnte. Zum Beispiel,

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

Die Tilde gibt an, wo Ihre Suche beginnen soll, und das Ergebnis sollte nur Dateien größer als 2 Kilobyte anzeigen.

Um es schick zu machen, können Sie die Option -exec verwenden, um einen weiteren Befehl auszuführen, der diese Verzeichnisse mit ihrer Größe auflisten soll.

Für weitere Informationen lesen Sie die man page für find .

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

AWK ist wirklich recht einfach für diese Art von Dingen. Hier sind einige Dinge, die Sie damit in Bezug auf die Überprüfung der Dateigröße tun können, wie Sie gebeten haben:

Dateien größer als 200 Bytes auflisten:

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

Dateien kleiner als 200 Bytes auflisten und die Liste in eine Datei schreiben:

Dateien von 0 Bytes auflisten, die Liste in eine Datei schreiben und die leeren Dateien löschen:

ls -l | awk '{if ($5 < 200) print $8}' | tee -a filelog
3
3
3
2010-10-28 23:27:11 +0000

Größer als 2000 Bytes:

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

Weniger als 2000 Bytes:

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