Как изменить -printf "%s \n" в команде поиска, чтобы размер отображался в МБ, а не в байтах?

Очень поздно, но я только что столкнулся с той же проблемой и нашел обходной путь, так что, надеюсь, это поможет кому-то еще. Отредактируйте пороговое значение в файле motion.conf так, чтобы оно было выше, чем разрешение в общем количестве пикселей (, установите для меня значение 999999 ). По умолчанию 1500 пикселей обнаруженного движения помечаются как движение. Кажется, что установка очень высокого порогового значения позволяет избежать зависания.

1
03.05.2020, 18:29
3 ответа

По крайней мере, в системах на базе GNU -вы должны иметь возможность использовать statи numfmtдля получения желаемого формата, например.:

find. -type f -size +10M -printf "%f -> " -exec sh -c '
  stat -c "%s" "$1" | numfmt --to-unit=1048576 --format="%.0f MB"
' sh {} \;

Измените --to-unit=1048576на --to-unit=1000000в зависимости от того, хотите ли вы МБ или МБ.

4
28.04.2021, 23:16

Если у вас есть доступ к ast -, откройте реализациюls:

find. -type f -size +10M -exec ls -ldh --format='%(name)s -> %(size)dB' {} +

Будут использоваться суффиксы MiB, GiB, TiB... по мере необходимости.

С zsh, в любой системе (с использованием только встроенных функций ), только для MiB (с округлением до ближайшего):

zmodload zsh/stat
stat -LnA info +size -- **/*(D.LM+10)
for f s ($info) printf '%s -> %.0fMiB\n' $f $(($s / 1048565.))
2
28.04.2021, 23:16

Гонка окончена, @steeldriver выиграл +1 ; -), а я бы пошел другим (может попроще ? )способ:

$ find. -type f -size +10M -printf "%f %s\n" | awk '{printf("%s -> %.0f MB\n", $1,$2/1048576)}'
0
28.04.2021, 23:16

Теги

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