2017-09-05 1 views
1

Ich habe versucht, eine Datei für die letzte Stunde per Perl umzubenennen. Ich habe für immer recherchiert und alles versucht, aber nichts hat funktioniert. Wie kann ich eine Datei per Perl umbenennen? Hier ist mein Skript:So benennen Sie eine Datei mit Perl um

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(); 

Wenn ich dies ausführen die Datei unverändert bleibt ... irgendwelche Ideen, wie das zu beheben?

+0

Welchen Fehler bekommen Sie? – ikegami

+0

Nur die "Fehler Rename File at DeleteLogFile.pl Zeile 58" –

+0

Gut, lassen Sie mich umformulieren: Welchen Fehler hat 'rename' zurückgeben? (Change 'die (" Fehler umbenennen Datei ")' zu 'sterben (" Fehler beim Umbenennen \ "testLog.log \" zu "testLog_ $ date.log \": $! \ N ")') – ikegami

Antwort

7

/ ist kein gültiges Zeichen für Dateinamen, da es das Verzeichnistrennzeichen ist. Sie haben effektiv aufgefordert, testLog.log im aktuellen Verzeichnis zu 2017.log im Verzeichnis testLog_09/05 umzubenennen. Dieses Verzeichnis existiert nicht.

ändern

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

zu

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

Noch besser wäre es, ein Format verwenden, das natürlich sortiert.

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

Das hat funktioniert ... Wie kommt es, dass der Fehler "Keine solche Datei oder Verzeichnis" war? Wenn es ein Problem mit dem neuen Namensformat –

+1

war, haben Sie gebeten, die Datei im Verzeichnis 'testLog_09/05' in' 2017.log' umzubenennen. Dieses Verzeichnis existiert nicht. – ikegami

+0

Oh okay, das macht Sinn ... Danke! –

Verwandte Themen