Как отсортировать вывод `ls`?

14

Можно ли просмотреть этот вывод, отсортированный с titlepage_1.pdf перед titlepage_19.pdf?

$ ls
allTitlepage.pdf         titlepage_12.pdf  titlepage_19.tex  titlepage_26.pdf  titlepage_32.tex  titlepage_4.tex
allTitlepage.tex         titlepage_12.tex  titlepage_1.pdf   titlepage_26.tex  titlepage_33.pdf  titlepage_5.pdf
assignment.pdf           titlepage_13.pdf  titlepage_1.tex   titlepage_27.pdf  titlepage_34.pdf  titlepage_5.tex
assignment.tex           titlepage_13.tex  titlepage_20.pdf  titlepage_27.tex  titlepage_34.tex  titlepage_6.pdf
graphicsAssignment2.pdf  titlepage_14.pdf  titlepage_20.tex  titlepage_28.pdf  titlepage_35.pdf  titlepage_6.tex
graphicsAssignment2.tex  titlepage_14.tex  titlepage_21.pdf  titlepage_28.tex  titlepage_35.tex  titlepage_7.pdf
README.md                titlepage_15.pdf  titlepage_21.tex  titlepage_29.pdf  titlepage_36.pdf  titlepage_7.tex
thesisTitlepage.pdf      titlepage_15.tex  titlepage_22.pdf  titlepage_29.tex  titlepage_36.tex  titlepage_8.pdf
thesisTitlepage.tex      titlepage_16.pdf  titlepage_22.tex  titlepage_2.pdf   titlepage_37.pdf  titlepage_8.tex
titlepage_0.pdf          titlepage_16.tex  titlepage_23.pdf  titlepage_2.tex   titlepage_37.tex  titlepage_9.pdf
titlepage_0.tex          titlepage_17.pdf  titlepage_23.tex  titlepage_30.pdf  titlepage_38.pdf  titlepage_9.tex
titlepage_10.pdf         titlepage_17.tex  titlepage_24.pdf  titlepage_30.tex  titlepage_38.tex  titlepage_one.pdf
titlepage_10.tex         titlepage_18.pdf  titlepage_24.tex  titlepage_31.pdf  titlepage_3.pdf   titlepage_one.tex
titlepage_11.pdf         titlepage_18.tex  titlepage_25.pdf  titlepage_31.tex  titlepage_3.tex   titlepage_two.tex
titlepage_11.tex         titlepage_19.pdf  titlepage_25.tex  titlepage_32.pdf  titlepage_4.pdf
alhelal
источник
3
Название должно быть более конкретным, поскольку оно выглядит как дубликат (что может быть в любом случае).
Питер Мортенсен

Ответы:

31

Используйте ключ -v [натуральный вид (версии) чисел в тексте]

ls -v
Виджай
источник
Если вам нужен один столбец, используйте ls -1v
Vijay
13

Выход отсортирован. Согласно lsсправочной странице:

Сортируйте записи по алфавиту, если не указан ни -cftuvSUX, ни --sort.

Но если вы хотите пойти дальше, у вас есть как минимум два варианта:

Вариант 1 - lsсортировка выключателей

man lsрассказывает о количестве переключателей, которые вы можете использовать для сортировки, в частности, страница man ls говорит:

нет (-U), размер (-S), время (-t), версия (-v), расширение (-X)

В вашем случае вам нужна сортировка по версии (-v). Будьте осторожны, так как это также отсортирует все, что имеет blahblah-X.Y.Z-Aпорядок, который может быть не совсем тем, что вы хотите. Смотрите также объяснение GNU сортировки версий .

Вариант 2 - Трубы для сортировки команд

Вы можете использовать канал |для отправки вывода другой команде, например, команде, sort которую вы можете использовать для сортировки несколькими другими способами, ls -1 | sort -nчто полезно, если у вас есть пронумерованные файлы. В -1коммутатор гарантирует , что выход один-линии каждого файла.

Точно так же вы можете манипулировать выводом, чтобы помочь с сортировкой, используя такие вещи, как sedили awk.

Есть много способов ответить на этот вопрос *. Вам может пригодиться учебник по оболочке Linux.

* (Видите, что я там делал? :-P)

Tu-Reinstate Моника-Дор Дух
источник
6

Как уже отмечался в комментариях, выход будет уже отсортирован, но по символам, а не число. Возможно, вы захотите передать вывод, lsчерез sortкоторый есть переключатель для сортировки по номерам в строках:

ls | sort --version-sort

Из справочной страницы :

-V, --version-sort
         natural sort of (version) numbers within text

Недостаток: когда мы выпускаем, lsон выводит файлы в таблицу с таким количеством столбцов, сколько умещается на текущем экране (как вы показали в своем посте). Но когда lsзамечает, что его вывод перенаправлен в файл или в канал (как в ls | sort), то lsпечатает файлы только в одном столбце, потому что тогда он предполагает, что вывод должен обрабатываться построчно (иначе файл за файлом) какой-то другой программой (вроде sort). Таким образом, вывод ls | sort -Vбудет в одном столбце, а не в таблице с несколькими столбцами. Посмотрите простой, но прекрасный ответ @vijay о том, как этого избежать.

PerlDuck
источник
1
Вы также можете передать выводcolumn
Дэвид Конрад
0

ls -l : перечисляет файлы каталога по вертикали, но не в определенном порядке.

ls -l | sort -k 3: -k 3отсортирует вывод предыдущей команды по 3-му столбцу.

AB01
источник