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

237

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

Ich schätze, ich kann so etwas machen

find . -exec ls -l {} \;

und leiten Sie das Ergebnis an weiter awk, um nach Dateigröße zu filtern. Aber sollte es nicht einen einfacheren Weg geben?

Decke Katze
quelle

Antworten:

376

Verwenden:

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 Unterschied zwischen + und - nach dem Größenwechsel.

Der -sizeSchalter erklärte:

-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.
John T
quelle
11
@Jay: Von man finden Sie am Anfang des Abschnitts "Tests": "Numerische Argumente können als + n für mehr als n, -n für weniger als n, n für genau n angegeben werden."
Dennis Williamson
4
Die Manpage erwähnt es oben und beschreibt, dass + und - auf alle Schalter angewendet werden können, die numerische ('n') Argumente annehmen, einschließlich was + und - bedeuten. (Suchen Sie auf der Manpage nach TESTS, um den Anfang des Abschnitts zu finden, in dem dies beschrieben ist.)
Slartibartfast,
1
@ Tennis Williamson: komisch, + und - arbeiten in OS X, aber die Manpage hat nicht den Abschnitt TESTS. Tatsächlich fehlt ein großer Teil im Vergleich zu Ihrem Link, es fehlen unter anderem TESTS, ACTIONS, OPERATORS.
Decke Katze
1
Es scheint, dass die GNU-Version der Manpage den Abschnitt "Tests" enthält, die BSD-Version jedoch nicht. linuxmanpages.com/man1/find.1.php
Jay
8
Ich habe gerade herausgefunden, dass die BSD-Manpages das +/- Ding beschreiben. Sein Weg am Ende des Abschnitts "Vorwahlen". - Bei allen Primären, die ein numerisches Argument enthalten, kann der Zahl ein Pluszeichen ("+") oder ein Minuszeichen ("-") vorangestellt werden. Ein vorangestelltes Pluszeichen bedeutet "mehr als n", ein vorangestelltes Minuszeichen bedeutet "weniger als n" und keines bedeutet "genau n"
Jay
7

Ich denke, findkönnte alleine nützlich sein, ohne zu AWK zu leiten. 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 anzeigen, die größer als 2 KB sind.

Sie können die -execOption verwenden, um einen anderen Befehl auszuführen, der diese Verzeichnisse mit ihren Größen auflistet.

Weitere Informationen finden Sie in der Manpage fürfind .

Siobhan
quelle
4

AWK ist wirklich ziemlich einfach für so etwas. Hier sind einige Dinge, die Sie in Bezug auf die Überprüfung der Dateigröße tun können, wie Sie gefragt haben:

Listen Sie Dateien mit mehr als 200 Bytes auf:

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

Listen Sie Dateien mit weniger als 200 Bytes auf und schreiben Sie die Liste in eine Datei:

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

Listen Sie Dateien mit 0 Bytes auf, zeichnen Sie die Liste in eine Datei auf und löschen Sie die leeren Dateien:

ls -l | awk '{if ($5 == 0) print $8}' | tee -a deletelog | xargs rm
MaQleod
quelle
Was ist der Unterschied zwischen dem teeWeiterleiten an und dem Umleiten an eine Datei wie ls -l > filelog(oder ls -l >> filelog)?
OmarOthman
3

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} '
Jay
quelle
Dies ist schlecht, da du den Speicherplatz auf der Festplatte belegt. Dies entspricht nicht der Dateigröße. Beispiel: Wenn Sie ein komprimiertes Dateisystem (btrfs / zfs) haben, erhalten Sie ein anderes Ergebnis als mit ls, das die tatsächliche dekomprimierte Größe anzeigt.
Chris Scott