Frage 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 sowas machen

find . -exec ls -l {} \;

und dann leiten Sie das Ergebnis an awk um nach Dateigröße zu filtern. Aber sollte es keinen leichteren Weg geben?


183
2017-10-28 23:09


Ursprung




Antworten:


Benutzen:

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ößenschalter.

Das -size Schalter 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.

285
2017-10-28 23:37



@Jay: Von Mann finden am Anfang des Abschnitts "Tests": "Numerische Argumente können angegeben werden als + n für größer als n, -n für weniger als n, n für genau n." - Dennis Williamson
Die man-Seite erwähnt es nach oben und beschreibt, dass + und - auf alle Schalter angewendet werden kann, die numerische ('n') Argumente einschließlich was + und - bedeuten. (Suche nach TESTS in der man-Seite, um den Anfang des Abschnitts zu finden, in dem dies beschrieben wird) - Slartibartfast
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
Die Solaris Man Seite hat einen "Expression" Abschnitt, der sie auch erklärt. docs.sun.com/app/docs/doc/816-0210/6m6nb7m9j?l=de&a=view - Jay
Ich habe gerade herausgefunden, dass die BSD-Manpages das +/- Ding beschreiben. Sein Weg am Ende des Abschnitts "Primaries". - Bei allen Vorwahlen, die ein numerisches Argument verwenden, kann der Zahl ein Pluszeichen ("+") oder ein Minuszeichen ("-") vorangestellt werden. Ein vorangestelltes Pluszeichen bedeutet "mehr als n", ein vorangestelltes Minuszeichen bedeutet "kleiner als n" und keines bedeutet "genau n" - Jay


Ich denke find könnte allein nützlich sein, ohne zu AWK zu führen. Beispielsweise,

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

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

Um es schick zu machen, können Sie das verwenden -exec Option, um einen anderen Befehl auszuführen, der diese Verzeichnisse mit ihren Größen auflisten soll.

Weitere Informationen finden Sie in der Man Seite für find.


6
2017-10-25 22:03





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

Listet Dateien größer als 200 Byte 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

Listet Dateien von 0 Bytes auf, zeichnet die Liste in eine Datei auf und löscht die leeren Dateien:

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

4
2017-10-29 00:01



Parsing ls ist nicht gut - phuclv
Was ist der Unterschied zwischen Rohrleitungen zu? tee und einfach in eine Datei umleiten, wie ls -l > filelog (oder ls -l >> filelog) - OmarOthman


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} '

3
2017-10-28 23:27