найти и размер
Единицей размера по умолчанию для команды 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