如何解决文件名顺序问题?
例如,
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
进行数字排序:numericglobsort
n
print -rC1 basename*(n)
请注意,如果您将 glob 扩展ls
专门传递给命令,ls
则会执行其自己的词法排序,因此您将丢失zsh
.
通过 GNU 实现ls
,您可以使用它的-U
选项来禁用排序:
ls -ldU basename*(n)