Perl - 重命名和排序图像文件
Perl - Rename and Sort Image Files
我有一些图像想要重命名和排序,但是当我重命名它们时,它们并没有按相同的顺序重命名。我得到了我想要的输出,但它们不是从原始文件中排序的。我真正要问的是如何匹配和替换下面的示例。
Code is current output:
image_1_0.jpg -> 6.jpg
image_1_1.jpg -> 4.jpg
Code output wanted:
image_1_0.jpg -> 1.jpg
image_1_1.jpg -> 2.jpg
图片文件夹
image_1_0.jpg
image_1_1.jpg
image_2_0.jpg
image_2_1.jpg
image_3_1.jpg
image_3_2.jpg
image_3_3.jpg
image_4_0.jpg
image_5_0.jpg
输出将是
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
这是我的
#! /usr/bin/perl
use warnings;
use strict;
my $file;
my @imagesFile;
my $counter = 0;
my $dir = 'usr/local/bin/images';
opendir (IMGDIR, "$dir") or die "Cannot open directory: $!";
@imagesFile = (readdir(IMGDIR));
closedir IMGDIR;
foreach my $file(@imagesFile){
$counter++;
rename "$dir/$file", "$dir/$counter.jpg";
}
可以使用一些关于这个问题的见解。
readdir
不会 return 按排序顺序排列文件名。如果您希望图像在递增它们的最终名称时按某种顺序排列,您必须自己做。
my @files = sort readdir($dh);
而且,您可能希望至少删除 .
和 ..
虚拟目录,以及您不想定位的任何其他文件。更好的是选择您想要的文件:
my @files = sort grep /image_\d_\d.jpg/, readdir($dh);
请检查以下代码是否符合您的要求。
#!/usr/bin/env perl
#
# vim: ai ts=4 sw=4
use strict;
use warnings;
my $counter = 0;
rename $_, ++$counter . '.jpg' for sort glob("*.jpg");
我有一些图像想要重命名和排序,但是当我重命名它们时,它们并没有按相同的顺序重命名。我得到了我想要的输出,但它们不是从原始文件中排序的。我真正要问的是如何匹配和替换下面的示例。
Code is current output:
image_1_0.jpg -> 6.jpg
image_1_1.jpg -> 4.jpg
Code output wanted:
image_1_0.jpg -> 1.jpg
image_1_1.jpg -> 2.jpg
图片文件夹
image_1_0.jpg
image_1_1.jpg
image_2_0.jpg
image_2_1.jpg
image_3_1.jpg
image_3_2.jpg
image_3_3.jpg
image_4_0.jpg
image_5_0.jpg
输出将是
1.jpg
2.jpg
3.jpg
4.jpg
5.jpg
6.jpg
7.jpg
8.jpg
9.jpg
这是我的
#! /usr/bin/perl
use warnings;
use strict;
my $file;
my @imagesFile;
my $counter = 0;
my $dir = 'usr/local/bin/images';
opendir (IMGDIR, "$dir") or die "Cannot open directory: $!";
@imagesFile = (readdir(IMGDIR));
closedir IMGDIR;
foreach my $file(@imagesFile){
$counter++;
rename "$dir/$file", "$dir/$counter.jpg";
}
可以使用一些关于这个问题的见解。
readdir
不会 return 按排序顺序排列文件名。如果您希望图像在递增它们的最终名称时按某种顺序排列,您必须自己做。
my @files = sort readdir($dh);
而且,您可能希望至少删除 .
和 ..
虚拟目录,以及您不想定位的任何其他文件。更好的是选择您想要的文件:
my @files = sort grep /image_\d_\d.jpg/, readdir($dh);
请检查以下代码是否符合您的要求。
#!/usr/bin/env perl
#
# vim: ai ts=4 sw=4
use strict;
use warnings;
my $counter = 0;
rename $_, ++$counter . '.jpg' for sort glob("*.jpg");