2016-01-11 29 views
0

我想用sort排序文件名列表。 例如:排序点字符第一个

file.ext 
file1.ext 
z_file2.ext 

使用排序,我得到

file1.ext 
file.ext 
z_file2.ext 

我怎么能做到让文件。排序方式:fileXXXX。

+2

尝试运行命令'LC_ALL = C'。 – choroba

+0

谢谢,但它没有帮助 –

+0

什么shell,操作系统,'排序'版本?文件名中是否有隐藏的字符? – choroba

回答

3

正如评论所说,你的问题是,您的区域会产生一个奇怪的排序顺序。区域设置到C的排序应该解决的问题:

LC_ALL=C sort 

对于更精确的修复,假设你想使用的语言环境感知整理订单,但仍然分开在扩展排序键,指定.作为字段分隔符,并使用两种类型的键:

sort -t. -k1,1 -k2 
0

您可以使用-d选项

从手册页:

-d, --dictionary-order consider only blanks and alphanumeric characters

$ cat toto 
file.ext 
file1.ext 
z_file2.ext 

$ sort -d toto 
file1.ext 
file.ext 
z_file2.ext 
+0

它不起作用,因为你写file1.ext在file.ext之前 –

+0

它以任何方式排序... – 123

+0

我更新了我的答案。这是你的预期订单吗? – Quentin

0

你必须独立于数字的文件名,它们相应的分类和合并回

$ sed -r 's/([0-9]*)\./ &/' file | sort -k1,1 -k2n | sed 's/ //' 
file.ext 
file1.ext 
z_file2.ext 
z_file11.ext 
相关问题