Можете ли вы отсортировать список ls по имени?
Можете ли вы отсортировать список ls по имени?
Ответы:
My ls по умолчанию сортирует по имени. Что вы видите?
man ls
состояния:
List information about the FILEs (the current directory by default). Sort entries alpha‐betically if none of -cftuvSUX nor --sort is specified.
:
ls
не сортирует, если -c1
указано: есть ли способ сделать это? ( --sort=name
похоже, не работает)
ls -la
, я вижу:, .bashrc - can - .config - Downloads - .local - tmp
сортировка будет имя будет:.bashrc - .config - .local - Downloads - can - tmp
Для чего-то простого вы можете комбинировать ls с sort . Просто список имен файлов:
ls -1 | Сортировать
Чтобы отсортировать их в обратном порядке:
ls -1 | sort -r
ls | sort -n
1.1.1; 1.1.2; 1.1.3; 2.10.1; 2.10.15; 2.10.2; 2.10.20; 2.10.21; 2.1.1; 2.1.10; 2.1.15; 2.1.2; 2.1.3; 2.1.4; 10.1.1; 10.1.2; 10.1.3; 11.0.1; 11.0.2; 11.0.20; 11.0.21; 11.0.22; Как вы видите, 2.10.15 до 2.10.2 .
ls -1r
.
ls
from по умолчанию coreutils
выполняет сортировку с учетом локали и, таким образом, в некоторых случаях может давать неожиданные результаты (например, %foo
сортировка между bar
и quux
внутри LANG=en_US
). Если вам нужна сортировка ASCIIbetical, используйте
LANG=C ls
LANG
Иллюстрируя поведение сортировки, этот пост мне очень помог!
?
для каждого символа, отличного от ascii, когда вывод является терминалом (плохая функция от ls проверяет, выводится ли он на терминал, работает при конвейере). Вы можете «исправить» это с помощью piping to cat, использовать C.UTF-8
локаль (если ваша система поддерживает это) и / или использовать -b
флаг. Еще лучше, не использовать ls
вообще, лучше использовать `
ls
сортирует дефис перед дефисом.
Прелесть инструментов * nix в том, что их можно комбинировать:
ls -l | sort -k9,9
Результат ls -l
будет выглядеть так
-rw-rw-r-- 1 luckydonald luckydonald 532 Feb 21 2017 Makefile
-rwxrwxrwx 1 luckydonald luckydonald 4096 Nov 17 23:47 file.txt
Итак, 9,9
вы сортируете столбец 9
до столбца 9
, являющегося именами файлов. Вы должны указать, где остановиться, в данном случае это тот же столбец. Столбцы начинаются с 1
.
Кроме того, если вы хотите игнорировать верхний / нижний регистр, добавьте --ignore-case
в команду сортировки.
-k9,9
значит?
9
до такого же столбца 9
. Нормальный ls
вывод выглядит так:, drwx------ 8 999 user 4.0K Feb 5 2017 file.txt
поэтому в столбце 9 указаны имена файлов. Если вы хотите игнорировать регистр, используйте --ignore-case
при сортировке.
ВНИМАНИЕ: "a" идет ПОСЛЕ "Z":
$ touch A.txt aa.txt Z.txt
$ ls
A.txt Z.txt aa.txt
normal
решения здесь.
Файлы, отличающиеся только числовой строкой, могут быть отсортированы по этому номеру при условии, что ему предшествует разделитель.
В этом случае можно использовать следующий синтаксис:
ls -x1 file | sort -t'<char>' -n -k2
Пример:
ls -1 TRA*log | sort -t'_' -n -k2
TRACE_1.log
TRACE_2.log
TRACE_3.log
TRACE_4.log
TRACE_5.log
TRACE_6.log
TRACE_7.log
TRACE_8.log
TRACE_9.log
TRACE_10.log
На странице руководства (для bash ls):
Сортировать записи в алфавитном порядке, если нет ни -cftuSUX, ни --sort.
which ls
все получилось бы, даже если бы в bash была встроенная ls. Скорее сделайте builtin ls
в bash и получите ошибку.
which
всегда возвращает путь. Используется type ls
для определения того, что думает оболочка ls
(встроенная, функция, исполняемый файл).
ls
Утилита должна соответствовать IEEE Std 1003.1-2001 ( POSIX.1
) , который гласит:
22027: он должен сортировать операнды каталога и не каталоги отдельно в соответствии с последовательностью сортировки в текущей локали.
26027: По умолчанию формат не указан, но вывод должен быть отсортирован в алфавитном порядке по имени символа:
- Имя библиотеки или объекта, если указано -A
- Название символа
- Тип символа
- Значение символа
- Размер, связанный с символом, если применимо.
Проверьте свой .bashrc
файл на псевдонимы.
alias
чтобы проверить все текущие псевдонимы.
In Debian Jessie, this works nice:
ls -lah --group-directories-first
# l=use a long listing format
# a=do not ignore entries starting with .
# h=human readable
# --group-directories-first=(obvious)
# Note: add -r for reverse alpha
# You might consider using lh by appending to ~/.bashrc as the alias:
~$ echo "alias lh='ls -lah --group-directories-first'" >>~/.bashrc
# -- restart your terminal before using lh command --