Разные цвета для диапазона KiB в `ls -l`

9

Есть ли какой-нибудь разумный способ выделить 4-й, 5-й и 6-й столбцы справа от размера файла в ls -l? Мое намерение состоит в том, чтобы облегчить чтение размера файла, будь то в байтах, КиБах или МиБах. Я знаю о -hфлаге, но нахожу, что интерпретировать буквы в конце гораздо сложнее, чем просто смотреть и видеть длину числа (величину). Это та же самая причина, по которой гоночные автомобили используют аналоговые циферблаты вместо цифровых.

Моя целевая оболочка - Bash. Спасибо.

РЕДАКТИРОВАТЬ: Я хочу выделить тысячи, десять тысяч и сто тысяч мест столбца размера. Как это: 123 456 789

dotancohen
источник
Может быть, это поможет вам: unix.stackexchange.com/a/49270/14084
Бернхард
Спасибо, Бернхард! Я использую ваше решение этого вопроса каждый день, я lslсвязал его с некоторыми незначительными изменениями. На самом деле, ответ на этот вопрос будет сочетаться с вашей техникой там, в моем lslпсевдониме.
dotancohen
@dotancohen Ах, я не понимал, что это тот же самый парень, который задавал вопрос, но я на самом деле имел в виду этот ответ ls ++ здесь :)
Бернхард
Понимаю. К сожалению, ls ++ не решает эту проблему.
dotancohen
@Bernhard: Это все еще нуждается в некоторой настройке, но взгляните:grep --color -E -- "$(ls -rtl $@ | tail -n4)|$" <(ls -l $@ | perl -pe 's{^((?:\S+\s+){4}\d*)(\d{3})(?=\d{3})}{$1\e[31;1m$2\e[m}')
dotancohen

Ответы:

7

Может быть что-то вроде:

ls -l | perl -pe 'BEGIN{@color=(0,2,3,1,5,4)}
  s{((?:\S+\s+){4})(\d+)}{"$1\e[3" . 
  $color[log($2||1)/log(2)/10] . "m$2\e[m"}e'

Для черного (или любого другого цвета по умолчанию на вашем терминале) для размеров от 0 до 1023, зеленого от 1k до 1M, желтого для 1M до 1G, затем красного, фиолетового, синего.

Редактировать . На основании ваших отредактированных требований:

ls -l | perl -pe 's{^((?:\S+\s+){4}\d*)(\d{3})(?=\d{3})}
                   {$1\e[31;1m$2\e[m}'
Стефан Шазелас
источник
Круто! Я предполагаю, что кто-то хотел бы иметь псевдоним для этого, хотя? :)
posdef
Спасибо. Это не то, что я ищу (я проясню вопрос), но это, безусловно, полезно, и я только что выучил кучу perl из этого!
dotancohen
Очень хорошо! И спасибо, что научили меня немного Perl!
dotancohen
3

Самый простой способ установки любого дополнительного программного обеспечения - это grep --colorто, что вы хотите. Чтобы выделить размер файла из вывода ls, вы должны выполнить что-то подобное (иногда это будет выделять не только размер):

ls -l | grep --color '\s\+[0-9]\+\s'

В противном случае, пожалуйста, обратитесь к аналогичному вопросу о SO.

порыв
источник
Спасибо. На самом деле, выделение номера не то, что я ищу. Я уточнил вопрос. В любом случае +1 за то, что научил меня чему-то новому!
dotancohen