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 dann an awk
weiter, um nach Dateigröße zu filtern. Aber sollte es nicht einen einfacheren Weg geben?
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ößenwechsel.
Der -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.
Ich denke, find
könnte alleine nützlich sein, ohne an 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.
Wenn Sie möchten, können Sie mit der Option -exec
einen weiteren Befehl ausführen, der diese Verzeichnisse mit ihren Größen auflistet.
Weitere Informationen finden Sie auf der Manpage für find
.
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
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} '