如何按正确的数字顺序对文件名进行排序

如何按正确的数字顺序对文件名进行排序

如何解决文件名顺序问题?

例如,

ls

生成文件如下:

basename1
basename11
basename12
basename13
[omitted]
basename2
basename20
basename21
....
basename3

问题

11-19 在 2 和 3 之前解析。

答案1

您可以使用排序

ls basename* | sort -V

sort 的 -V 选项是“版本”的缩写,但它实际上按“名称和编号”排序,这正是您似乎正在寻找的。请参阅排序手册页:

-V --版本排序

 Sort by version name and number.  It behaves like a standard sort,
 except that each sequence of decimal digits is treated numerically
 as an index/version number

GNU ls

ls -v可以对列表进行版本排序。

答案2

使用shell,您可以使用选项或glob 限定符对 globzsh进行数字排序:numericglobsortn

print -rC1 basename*(n)

请注意,如果您将 glob 扩展ls专门传递给命令,ls则会执行其自己的词法排序,因此您将丢失zsh.

通过 GNU 实现ls,您可以使用它的-U选项来禁用排序:

ls -ldU basename*(n)

相关内容