находка: равный предел размера файла, но другой блок возвращает другой результат

252
Vince

Я заметил, что эти две команды для вывода файлов ниже 5 ГиБ дают разные результаты:

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

В частности, тот, который использует единицу килобайта ( 5368709120c), возвращает дополнительные файлы, размер которых превышает максимальный размер файла, возвращаемый тем, который использует единицу GiB ( 5G).

Со findстраницы руководства я прочитал следующее:

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

Итак, учитывая, что единица измерения Gсоставляет 1073741824, 5Gдолжно быть 5368709120c. Проблема связана с тем, как подсчитываются редкие или косвенные блоки?

Заранее спасибо за помощь.

1

1 ответ на вопрос

1
Kamil Maciorowski

В моих man findсостояниях Kubuntu [выделено мое]:

-size n[cwbkMG]
[...] и префиксы означают больше и меньше, чем, как обычно. Имейте в виду, что размер округляется до следующей единицы . Поэтому не эквивалентно . Первый соответствует только пустым файлам, последний - файлам от 0 до 1 048 575 байт.
+--size -1M-size -1048576c

Таким образом, если файл занимает более 4 ГБ и меньше (или точно) 5 ГБ, он будет соответствовать -size 5G. Вы -size -5Gне будете соответствовать этому.

Благодарю. Прискорбно, что в справочной странице CentOS об этом не говорится. Vince 6 лет назад 0

Похожие вопросы