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


14

是否可以查看在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

3
标题应该更加具体,因为它看起来像重复的(反正可能还是这样)。
彼得·莫滕森

Answers:


31

使用开关-v [文本内自然的(版本)数字排序]

ls -v

如果要使用单列,请使用ls -1v
Vijay

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)


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的简单但完美的答案


1
您也可以将输出通过管道发送给column
David Conrad,

0

ls -l :垂直列出目录的文件,但不按特定顺序列出。

ls -l | sort -k 3-k 3将按第三列对前一个命令的输出进行排序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.