使用perl重命名文件,文件被删除

alm*_*125 0 perl rename

我的代码看起来像这样:

#!/usr/bin/perl -w
use strict;
use warnings;

my $i = 1;
my @old_names = glob "/root/pics/*.jpg";
my $new_name = "picture$i";

foreach my $old_name (@old_names) {
    rename($old_name, $new_name) or 
        die "Couldn't rename $old_name to $new_name: $!\n";
} continue { $i++ }
Run Code Online (Sandbox Code Playgroud)

当我执行脚本时删除图片,我做错了什么?

编辑:

这对我有用.

#!/usr/bin/perl -w
use strict;
use warnings;

my $i = 1;
my @old_names = glob "/root/pics/*.jpg";


foreach my $old_name (@old_names) {

    my $new_name = "picture$i" . ".jpg";

    rename($old_name, "/root/pics/$new_name") or die "Couldn't rename $old_name to $new_name: $!\n";

} continue { $i++ }
Run Code Online (Sandbox Code Playgroud)

感谢大家的帮助.

TLP*_*TLP 5

这一行:

my $new_name = "picture$i";
Run Code Online (Sandbox Code Playgroud)

在你的循环之外.因此它没有得到更新.所以所有文件都被重命名为相同的名称,这有效地删除了它们.

解决方案是在循环内移动赋值,或者一起跳过变量并执行

rename($old_name, "picture$i") ...
Run Code Online (Sandbox Code Playgroud)

出于打高尔夫的目的,您也可以考虑

rename($old_name, "picture" . $i++) ...
Run Code Online (Sandbox Code Playgroud)

您可能还有兴趣查看File :: Copy,这是一个核心模块.