我有一个文件夹中的文件列表。
名称是:
1-a
100-a
2-b
20-b
3-x
我希望将它们排序为
1-a
2-b
3-x
20-b
100-a
文件总是一个数字,后跟一个破折号,后跟任何东西。
我尝试使用ls
和col
sort
并且它有效,但我想知道是否有更简单的解决方案。
忘记提及:这是在Mac OS X上运行的bash。
答案 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 ...
情况)。