Как отсортировать вывод `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-му столбцу.