Расширение с числами в человекочитаемом формате

Я предполагаю, что Вы используете GRUB.

С GRUB 1 (наследие GRUB, версии 0.9x), в /boot/grub/menu.lst, ввести hiddenmenu. Нажмите клавишу ESC для показа меню.

#General configuration:
#Uninterupted within 5 seconds and default boot option 0.
timeout   5
default   0
color light-blue/black light-cyan/blue

#Hides the menu by default (press ESC to see the menu)
hiddenmenu

Если Вы используете GRUB 2 (версии 1.9x и), /boot/grub/grub.cfg содержит меню. Но изменить настройки, отредактируйте /etc/default/grub файл.

3
27.04.2013, 02:52
4 ответа

Используйте n спецификатор шарика.

print -lr -- *.mp3(n)

Можно изменить порядок сортировки по умолчанию путем установки numeric_glob_sort опция.

setopt numeric_glob_sort
print -lr -- *.mp3

Если Вам нужен лексикографический порядок на один шаблон в то время как numeric_glob_sort может быть в действительности, инвертировать n спецификатор шарика.

print -lr -- *(^n)
4
27.01.2020, 21:10
  • 1
    Хотя, вероятно, не проблема к OP, нужно отметить что n флаг только понимает положительные целочисленные десятичные числа (никакое отрицание, никакие плавания, никакой k/M/G/T... не достаточен как sort -h делает, никакое шестнадцатеричное число, и числа с продвижением 0s рассматривают как десятичное число, не восьмеричное) –  Stéphane Chazelas 28.04.2013, 11:11

Один подход должен был бы выполнить вывод ls посредством команды sort управлять, как вывод отображен.

Можно использовать -h (иначе. --human-numeric-sort) какие вещи видов в человекочитаемой форме.

$ ls | sort -h
1 - Main title.mp3
2 - Main title.mp3
10 - Main title.mp3

РЕДАКТИРОВАНИЕ № 1 - обращение к комментарию OP

Вышеупомянутое может быть перенесено в псевдоним как так:

$ alias lss="ls | sort -h"

Выполнение вышеупомянутой команды было бы затем уменьшено до этого:

$ lss
1 - Main title.mp3
2 - Main title.mp3
10 - Main title.mp3

Ссылки

3
27.01.2020, 21:10
  • 1
    Как я сказал в вопросе, я надеялся не должным быть использовать каналы и вид, но для некоторого волшебства с zsh, который позволит этому делать это для меня, когда это расширится *. –  Sardathrion - Reinstate Monica 26.04.2013, 16:38

Можно изменить порядок сортировки в zsh globbing (см. ответ Gilles), но ls отсортирует его аргументы так или иначе, и по умолчанию лексикографически.

Если Ваш ls GNU ls, можно использовать -v опция отсортировать численно:

ls -1v

Или:

ls -1vd -- *

Это не эквивалентно sort -h потому что sort -h должен отсортировать вещи как вывод du -h, это то, где 1.12G больше, чем 999M, в то время как ls -v и zsh (n) спецификаторы globbing приспособлены к сортировке вещей как номера версий (где 1.20 больше, чем 1,4, например).

Если Вы действительно хотите globbing, которые понимают, что это достаточно, необходимо было бы записать zsh функцию вида для этого.

С zsh можно определить порядок сортировки шарика с функцией и использовать его как *(o+that-function). that-function берет имя файла к виду в $REPLY переменная и должна возвратиться в ту же самую переменную, что-то это zsh может затем отсортировать лексикографически (или численно если n также обеспечивается).

Что-то как:

h() {
  local -A x
  local match
  setopt localoptions extendedglob
  x=(k 1 K 1 M 2 G 3 T 4 P 5 E 6)
  REPLY=${REPLY//(#b)((|[0-9]#.)[0-9]##)([${(kj::)x}])/$((match[1]*2**$x[$match[3]]0))}
}

был бы заменять весь 1.1G к их значению (1181116006.4).

Который можно затем использовать как:

ls -1Ud -- *(no+h)

(-U быть GNU ls опция сказать ls не отсортировать его аргументы).

Это не будет работать хорошо однако с числами с дробной частью, поскольку она отсортировала бы 1.20 после 1.3 например:

$ ls
1.20  1.3  3.1G  500M
$ ls -v1Ud -- *(no+h)
1.3
1.20
500M
3.1G

Для чего-то, что отсортировало бы все виды десятичных плавающих чисел с дополнительным, достаточен (как-1e20M, 1E-20, 100k, 3000M), потому что zsh может только отсортировать лексикографически или численно ограниченный положительными десятичными целыми числами, нам была бы нужна функция для преобразования целых чисел или в строки что вид лексикографически в том же порядке или в положительные десятичные целые числа что вид численно в том же порядке.

zsh делает и десятичную систему счисления с плавающей точкой с числами на 64 бита где это возможно, таким образом, мы могли применить функцию с плавающей точкой, которая поворачивает те числа (или по крайней мере диапазон, поддерживаемый zsh плавания) в целое число от 0 до 263. Используя логарифм функция могла быть опцией. Что-то как:

zmodload zsh/mathfunc
h() {
  local -A x
  local match v
  setopt localoptions extendedglob
  x=(k 1 K 1 M 2 G 3 T 4 P 5 E 6 Z 7 Y 8)
  REPLY=${REPLY//(#b)([-+]|)(([0-9]#.|)[0-9]##([eE]([-+]|)[0-9]##|))\
([${(kj::)x}]|)/[$(([#10]1e15*(1500+ $match[1](745+log((v=$match[2]\
${${match[2]##*[Ee.]*}:+.}*2.**$x[$match[6]]0)==0?2.48e-324:v)))))]}
}

Использоваться как:

print -rl -- *(no+h)

Или, для отступания к числовой сортировке для дифференциации 100000000000000001 и 100000000000000002, например (которые имеют тот же логарифм с zsh точность плавающая):

print -rl -- *(noe:h:on)

Затем мы получаем что-то еще лучше, чем sort -h:

$ ls | sort -h
-4
-3
+20
a2
b1
b10
b2
1e-20Y
1e3
1.20
1.3
3
20
999
1000 1e9
1000 900M
1001
1024
1k
12k
0.000000001G

$ print -rl -- *(noe:h:on)
-4
-3
0.000000001G
1.20
1.3
3
20
+20
999
1e3
1000 900M
1000 1e9
1001
1k
1024
1e-20Y
12k
a2
b1
b2
b10

Теперь, для Вашей определенной nyxmms2 проблемы, для дополнения ответа Gilles я Вы - ленивая машинистка, Вы могли также определить на этот раз выбор (вместо того, чтобы "заказать") функция для музыкальных файлов, как:

m() [[ $REPLY == (#i)*.(mp3|ogg)(-.) ]]

nyxmms2 *Zep*(n+m)

Или использование переменная:

m='.(#i)(mp3|ogg)(n-.)'
nyxmms2 *Zep*$~m

Или глобальный псевдоним:

alias -g @m='./*.(#i)(mp3|ogg)(n-.)'
nyxmms2 @m

Включать numericglobsort для nyxmms2 только, Вы могли сделать:

preexec() {[[ $1 = nyxmms2* ]] && setopt numericglobsort}
precmd setopt nonumericglobsort
2
27.01.2020, 21:10

Вы могли всегда использовать расширение оболочки, чтобы сделать это.

nyxmms2 add $(ls /path/to/dir/*.mp3 | sort -n)

так как Вы имеете дело с музыкой, Вы могли бы создать "плей-листы"

ls /path/to/album/or/song/*.mp3 | sort -n >> /path/to/playlist
nyxmms2 add < /path/to/playlist
1
27.01.2020, 21:10
  • 1
    Как я сказал в вопросе, я надеялся не должным быть использовать каналы и вид, но для некоторого волшебства с zsh, который позволит этому делать это для меня, когда это расширится *. –  Sardathrion - Reinstate Monica 26.04.2013, 16:40
  • 2
    @Sardathrion, почему Вы не хотите использовать каналы? это - то, для чего они..... –  h3rrmiller 26.04.2013, 17:10
  • 3
    и мысль, что могло бы быть что-то в zsh, который позволяет Вам устанавливать порядок сортировки. –  Sardathrion - Reinstate Monica 26.04.2013, 17:26
  • 4
    @Sardathrion там - всего лишь это, привычка делает интерпретирующий вид как sort -n... с zsh Вы могли использовать расширение параметра на вид, но это не интерпретирует 2 как являющийся больше, чем 10 (ls *(n)) –  h3rrmiller 26.04.2013, 17:47

Теги

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