Можно изменить порядок сортировки в 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
Я наконец нашел, хотя и очень уродливый, способ выяснить, какой процесс занимает псевдотерминал pts / 0
.
В качестве суперпользователя я сделал cd / proc
и ввел следующую команду bash:
for pid in [0-9]* ; do \
RES=`ls -l $pid/fd/* 2>/dev/null| grep pts/0`; \
if [ -n "$RES" ]; then echo "Process $pid owns: $RES"; fi; \
done
Таким образом я понял, что в моем случае pts / 0
занят процессом / usr / sbin / bumblebeed
.