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

如何对 `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

答案1

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

ls -v

如果你想使用单列

ls -1v

答案2

输出已排序。根据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)

答案3

正如评论中指出的那样,输出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很简单,但是完美答案如何避免这种情况。

答案4

请尝试一下。

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'

相关内容