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

Можно ли просмотреть этот вывод, отсортированный с 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

5 ответов

Решение

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

ls -v

Вывод отсортирован. Согласно 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)

Как уже указывалось в комментарии, выходные данные уже отсортированы, но по символам, а не по номерам. Вы можете направить вывод 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 о том, как этого избежать.

Пожалуйста, попробуйте это.

      ls -ltrh --sort=size

Пример вывода

      $ ls -ltrh --sort=size
total 13M
drwxr-xr-x 1 tayyab.sarfraz 1049089    0 Nov 11 14:26  ZZZZZ3309669667/
drwxr-xr-x 1 tayyab.sarfraz 1049089    0 Nov 11 14:26  ZZZZZ1036987434/
-rw-r--r-- 1 tayyab.sarfraz 1049089  504 Jun 10 17:11  desktop.ini
-rw-r--r-- 1 tayyab.sarfraz 1049089 1021 Oct 30 13:02  jZHcYAg3964781410.txt
-rw-r--r-- 1 tayyab.sarfraz 1049089 1021 Oct 30 13:02  jZHcYAg3531170004.txt
-rw-r--r-- 1 tayyab.sarfraz 1049089 2.0K Oct 18 13:06  ZZZZZ596653076.doc
-rw-r--r-- 1 tayyab.sarfraz 1049089 2.0K Oct 18 13:06  ZZZZZ2113390587.doc
-rw-r--r-- 1 tayyab.sarfraz 1049089 4.0K Oct 26 12:35 '!!!!!3048223661.pem'

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

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

Другие вопросы по тегам