如何使用 Perl 重命名文件

How to rename a file using Perl

在过去的一个小时里,我一直在尝试使用 perl 重命名一个文件。我一直在研究并尝试了一切,但没有任何效果。如何使用 perl 重命名文件?这是我的脚本:

use strict;
use warnings;
use Time::Piece;
use File::Copy qw(move);


# Open the log file
    my $log_file = 'testLog.log';
    open my $log_fh, '<', $log_file or die "Could not open file $log_file: 
$! +";

# Create New File
    my $new_log_file = 'testLog.log';

# My file size (bytes)
    my $logFileSize = -s $log_file;

# My file size (Mb)
    my $logFileSizeMB = $logFileSize / 1000000;

# File size limit
    my $fileSizeLimit = 100;

# Get Date
my $date = localtime->strftime('%m/%d/%Y');

# New File Name
my $newFileName = "testLog_$date.log";

sub main {

    if ($logFileSizeMB > $fileSizeLimit) {

        close $log_fh or die "Could not close file $log_file: $!";

        #print "$newFileName\n";
        rename("testLog.log", "testLog_$date.log") || die ("Error Renaming 
File");



        #open my $new_log_fh, '>', $new_log_file or die "Could not open file 
$new_log_file: $! +";
        #close $new_log_fh or die "Could not close file $new_log_file: $!";

        print "New log file created successfully!";

    } else {

        print "File size is under $fileSizeLimit";

    }


    exit(0);
}

main();

当我运行这个文件保持不变...关于如何解决这个问题有什么想法吗?

/ 不是文件名的有效字符,因为它是目录分隔符。您实际上要求将当前目录中的 testLog.log 重命名为目录 testLog_09/05 中的 2017.log。该目录不存在。

改变

my $date = localtime->strftime('%m/%d/%Y');

my $date = localtime->strftime('%m-%d-%Y');

更好的是,使用自然排序的格式。

my $date = localtime->strftime('%Y-%m-%d');