найти и размер
Единицей размера по умолчанию для команды find
является блок из 512 байтов.
Смущает то, что когда вы указываете размер файла в таких единицах, как КБ, МБ или ГБ, команда find
округляет размер файла и использует этот показатель перед проверкой на соответствие предикату size
.
Например, когда предикат размера выражается в ГБ (-size -1G
), размер файла 900 МБ округляется до 1 ГБ - что составляет не менее 1 ГБ, поэтому такой файл не будет возвращен с помощью -size -1G
, Чтобы найти файлы размером менее 1 ГБ, размер должен быть указан в меньших единицах:
find -size -1024M
Посмотрите этот ответ Стефана Шазеласа на связанный вопрос о Unix и Linux.
find . -size -1M
покажет только файл размером менее 1M, то есть 0M. Да, я знаю, это сбивает с толку.
Официальная документация
На странице руководства POSIX для find
предикат size
задокументирован следующим образом (выделено мной):
- размер n [c]
Первичное значение должно оцениваться как true, если размер файла в байтах, разделенный на 512 и округленный до следующего целого числа, равен n
. Если за n
следует символ «c», размер должен быть в байтах.
Страница man для GNU find
предупреждает, что
Префиксы +
и -
означают больше и меньше, чем обычно, но имейте в виду, что размер округляется до следующей единицы (поэтому однобайтовый файл не соответствует -size -1M
).
Использование -and
предиката
Наконец, использование предиката -and
не имеет ничего общего с тем, как find
интерпретирует размеры файлов. Нет проблем с использованием разных единиц измерения по обе стороны от -and
или -or
.
Между прочим, -and
является значением по умолчанию и неявно используется для объединения того, как несколько предикатов оцениваются в выражении find
; -and
на самом деле является расширение GNU , чтобы find
так опуская это лучше для портативности. Кроме того, оставив его, вы можете значительно упростить выражение find
(также нет необходимости в скобках):
find / -type f -size +10M -size -1000M