如何对`ls`的输出进行排序?

alh*_*lal 14 command-line ls

是否可以在 titlepage_19.pdf 之前查看按 titlepage_1.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
Run Code Online (Sandbox Code Playgroud)

Vij*_*jay 31

使用开关 -v [文本中自然排序的(版本)编号]

ls -v
Run Code Online (Sandbox Code Playgroud)


tu-*_*duh 13

输出已排序。根据手册ls页:

如果未指定 -cftuvSUX 或 --sort,则按字母顺序对条目进行排序。

但如果你想更进一步,你至少有两个选择:

选项 1 -ls排序开关

man ls告诉你一些你可以用来排序的开关,特别是ls 手册页说:

无 (-U)、大小 (-S)、时间 (-t)、版本 (-v)、扩展名 (-X)

在您的情况下,您需要“版本”排序(-v)。 但是要小心,因为这也会对任何blahblah-X.Y.Z-A可能不完全是您想要安排的东西进行排序。另请参阅GNU 对版本排序的解释

选项 2 - 排序命令的管道

您可以使用管道|将输出发送到另一个命令,例如,您可以使用该命令 sort以多种其他方式进行排序,ls -1 | sort -n如果您有编号的文件,这很有用。该-1开关确保输出为每文件一行。

同样,您可以使用sed或 之类的东西来操作输出以帮助进行排序awk

有很多方法可以回答这类*问题。您可能会发现 linux shell 教程很有帮助。

*(看看我在那里做了什么?:-p)


Per*_*uck 6

正如评论所指出的,输出已经排序,但字符,而不是数字。你可能希望通过管道输出ls,通过sort具有由数字的字符串内的开关进行排序:

ls | sort --version-sort
Run Code Online (Sandbox Code Playgroud)

联机帮助页

-V, --version-sort
         natural sort of (version) numbers within text
Run Code Online (Sandbox Code Playgroud)

缺点:当我们发出时,ls它会输出一个表格中的文件,该表格的列数与当前屏幕上的列数相同(就像您在帖子中显示的那样)。但是当ls注意到它的输出被重定向到一个文件或一个管道(如ls | sort)时,然后ls将文件打印在列中,因为它假设输出将被逐行处理(又名逐文件)通过其他一些程序(如sort)。所以输出ls | sort -V将在一列中,而不是在多列的表中。请参阅@vijay的简单但完美的答案,了解如何避免这种情况。