Проблема связана не с операторами и
, а с неинтуитивным синтаксисом аргумента -size
. Аргумент - это не максимальный размер, указанный с единицей измерения, а максимальное число и единица измерения, в которых выполняется вычисление.Тест -size -1k
не означает «меньше 1 кБ», но «количество кБ (с округлением в большую сторону) меньше (и не равно) 1». Таким образом, -размер -1k
соответствует только файлам размера 0, а также для -размер -1M
, -размер -1G
и т. Д.
сопоставить файлы размером 2 30 байтов или меньше, используйте -размер -2G
или -размер -1025M
и т. д. (посмотрите, как -2G
не эквивалентно -2048M
). В качестве альтернативы используйте ! -size + 1G
- размер с модификатором +
означает «строго больше этого размера». Чтобы сопоставить файлы размером 2 30 -1 байта или меньше, используйте -size -1073741824c
.
Я думаю, что причина того, почему -размер - ЧИСЛО ЕДИНИЦА
так странно, заключается в исторической совместимости с -размер - НОМЕР
, который подсчитывал блоки ; округление имеет смысл, поскольку файл, занимающий, например, 7.5 блоков фактически занимают 8 блоков, причем последний блок не заполнен. Следовательно, -размер -8
означает «занимает 7 блоков или меньше». Добавление модуля работает так, как если бы оно было размером блока, поэтому -size -8k
означает «занимающий 7kB или меньше».
(Этот ответ касается поиска GNU - некоторые другие реализации ведут себя иначе, и POSIX не стандартизирует единицы, кроме блоков и байтов.)