Как systemd должен работать с сетевыми интерфейсами?

Проблема связана не с операторами и , а с неинтуитивным синтаксисом аргумента -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 не стандартизирует единицы, кроме блоков и байтов.)

4
01.04.2019, 14:17
0 ответов

Теги

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