Bash按照Windows的"自然排序顺序"排序

jkn*_*lse 22 sorting bash cygwin

我有一堆PDF正在尝试附加在一起,我有一个程序,给定一个文件列表,将它们附加到一个PDF.

我遇到的问题是管道文件名以排序不会产生所需的顺序.的国旗没有那种给我什么,我想无论是.我在下面有一些例子:

所需的排序顺序:

test1.pdf
test2.pdf
test10.pdf
Run Code Online (Sandbox Code Playgroud)

使用sort实现排序顺序:

test1.pdf
test10.pdf
test2.pdf
Run Code Online (Sandbox Code Playgroud)

有关我想要的排序顺序的详细信息,请参阅:

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

dev*_*ull 31

假设您正在使用GNU排序,请使用以下-V选项:

   -V, --version-sort
          natural sort of (version) numbers within text
Run Code Online (Sandbox Code Playgroud)

为了您的输入,它产生:

test1.pdf
test2.pdf
test10.pdf
Run Code Online (Sandbox Code Playgroud)

  • 如果你使用`ls`,你可以做`ls -1v`,它会给你这个. (9认同)
  • 不幸的是[BusyBox`sort`](http://www.busybox.net/downloads/BusyBox.html#sort)(典型的嵌入式Linux)不支持`-V`选项. (2认同)
  • 对于后代,自然排序不包含在 FreeBSD 或 OSX 中的 `ls` 中。(我知道,这个问题是关于 cygwin 的 ..) (2认同)