将文件从数字排序转换为字母排序

时间:2018-12-01 13:21:15

标签: perl

我的文件排序如下,但是没有按日期排序。

1(1).jpg 
1(2).jpg 
1(3).jpg 
1(4).jpg 
. 
. 
.

我想对它们进行排序

执行以下操作后:

perl -e '$prefix="aaaa";map{rename "$_",$prefix++.".$1" if /.*\.(.*)/} <*>'

我得到以下信息:

file 1 (1).jpg -> aaaa.jpg
file 1 (10).jpg -> aaab.jpg
file 1 (100).jpg -> aaac.jpg
file 1 (101).jpg -> aaad.jpg

我希望它像:

1(1).jpg -> aaaa.jpg
1(2).jpg -> aaab.jpg
1(3).jpg -> aaac.jpg
1(4).jpg -> aaad.jpg

我想这是因为它考虑了数字排序而不是字母排序。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

这是一种将文件按数字排序到数组@sorted_files中的方法:

use feature qw(say);
use strict;
use warnings;

my @files = qw[ file(1).jpg file(2).jpg file(10).jpg];
my @sorted_files = map { $_->[1] } sort { $a->[0] <=> $b->[0] } map {
    my ($search_key) = $_ =~ /\((.*)\).jpg/;
    [$search_key, $_]
} @files;

say for @sorted_files;

输出

file(1).jpg
file(2).jpg
file(10).jpg

现在,您可以应用例程来进一步转换它们。