find: Gleiche Dateigrößenbegrenzung, aber unterschiedliche Einheit liefert ein anderes Ergebnis

354
Vince

Mir ist aufgefallen, dass diese beiden Befehle zum Auflisten von Dateien unter 5 GiB zu unterschiedlichen Ergebnissen führen:

find . -type f -size -5368709120c find . -type f -size -5G 

Insbesondere die 5368709120cDatei, die Kilobyte unit ( ) verwendet, gibt zusätzliche Dateien zurück, die größer sind als die maximale Dateigröße, die von der Datei zurückgegeben wird, die die GiB-Unit ( 5G) verwendet.

Auf der findHandbuchseite habe ich Folgendes gelesen:

-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. 

Also, da die Einheit von G1073741824 ist, 5Gsollte es sein 5368709120c. Ist das Problem darauf zurückzuführen, wie spärliche oder indirekte Blöcke gezählt werden?

Vielen Dank im Voraus für die Hilfe.

1

1 Antwort auf die Frage

1
Kamil Maciorowski

In meinen Kubuntu- man findStaaten:

-size n[cwbkMG]
[...]
Die +und -Präfixe bedeuten größer und kleiner als, wie üblich. Beachten Sie, dass die Größe auf die nächste Einheit aufgerundet wird . Daher -size -1Mist das nicht gleichwertig -size -1048576c. Ersteres entspricht nur leeren Dateien, letzteres Dateien von 0 bis 1.048.575 Byte.

Wenn also eine Datei mehr als 4 GB und weniger als (oder genau) 5 GB benötigt, ist sie für die Datei qualifiziert -size 5G. Ihr -size -5Gpasst nicht dazu.

Vielen Dank. Bedauerlich, dass dies in der Manpage zu CentOS nicht erwähnt wird. Vince vor 6 Jahren 0