类似于Windows“自然排序”的Bash排序

48
我有一堆PDF文件,想把它们合并成一个PDF。我使用了一个程序,可以将文件列表附加到一个PDF中。但我遇到的问题是,将文件名通过管道传递给sort命令无法得到所需的排序顺序,sort命令的任何标志也不能满足我的要求。以下是一些示例:
所需排序顺序:
test1.pdf
test2.pdf
test10.pdf

使用 sort 实现了排序:

test1.pdf
test10.pdf
test2.pdf

关于我所需的排序方式的详细信息,请参见:

http://msdn.microsoft.com/en-us/library/bb759947.aspx

1个回答

68

假设您正在使用GNU Sort,请使用-V选项:

   -V, --version-sort
          natural sort of (version) numbers within text

根据您的输入,它将生成:

test1.pdf
test2.pdf
test10.pdf

14
如果您使用ls命令,可以使用ls -1v命令来得到这个结果。 - Sunny Patel
@LaughDonor 谢谢。我不经常使用 ls - devnull
1
不幸的是,-V 对我拥有的文件名无效。它们的格式为:sec2_pages12-20、sec2_pages21-30 等等... 不过 ls 选项完全有效,谢谢! - jknielse
2
不幸的是,嵌入式Linux常用的BusyBox sort不支持-V选项。 - Craig McQueen
2
为了后代,自然排序在FreeBSD或OSX的ls中也没有包含。(我知道,这个问题是关于cygwin的..) - ghoti
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接