Можете ли вы отсортировать список 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.
lsfrom по умолчанию 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 --