排序文件名升序名称在bash中有破折号

时间:2014-07-25 16:52:25

标签: macos bash

我有一个文件夹中的文件列表。

名称是:

1-a
100-a
2-b
20-b
3-x

我希望将它们排序为

1-a
2-b
3-x
20-b
100-a

文件总是一个数字,后跟一个破折号,后跟任何东西。

我尝试使用lscol sort并且它有效,但我想知道是否有更简单的解决方案。

忘记提及:这是在Mac OS X上运行的bash。

2 个答案:

答案 0 :(得分:2)

一些 ls 实现, GNU coreutils'ls 就是其中之一,支持 -v (自然类型的(版本)数字)文本)选项:

% ls -v
1-a  2-b  3-x  20-b  100-a

或:

% ls -v1
1-a
2-b
3-x
20-b
100-a

答案 1 :(得分:1)

使用sort定义字段。

sort -s -t- -k1,1n -k2 filenames.txt

-t告诉sort-视为输入项中的字段分隔符。 -k1,1n指示sort首先按数字排序第一个字段; -k2使用剩余字段作为cade中的第二个键进行排序,第一个字段相等。 -s保持排序稳定(尽管您可以省略它,因为整个输入字符串在一个字段或另一个字段中使用)。

(注意:我假设文件名不包含换行符,因此保证ls > filenames.txt之类的内容可以生成每行一个名称的文件。您也可以使用ls | sort ...情况)。