2016-05-17 13 views
0

Ich brauche einen Teil des Namens von Dateien in einem Verzeichnis zu ändern, verwende ich den folgenden Code, aber es druckt nur in Terminal der Zeichenfolge die Änderung aber nichtin einem Verzeichnisnamen von Dateien ändern

speichern
my @files = glob("*.grb *.out"); 
foreach my $file (@files) { 
    print "$file\n"; 
    s/d02/d03/g; 
} 

Wie kann ich sie mit der Zeichenfolge d03 anstelle von d02 bekommen?

+1

Der obige Code gibt den geänderten Dateinamen nicht an Terminal aus. Sie drucken es zuerst und führen dann eine Ersetzung für einen nicht initialisierten Wert durch (die Variable '$ _'). Fügen Sie den Code ein, den Sie tatsächlich ausprobiert haben. Dies ist der beste Versuch, das Problem zu lösen. –

+2

Siehe [Umbenennen] (http://p3rl.org/rename). – choroba

Antwort

1
my @files = glob("*.grb *.out"); 
foreach my $file (@files) { 
    (my $newName = $file) =~ s/d02/d03/g; 
    rename $file, $newName; 
} 

Oder wenn Sie Perl haben 5.14+,

my @files = glob("*.grb *.out"); 
foreach my $file (@files) { 
    my $newName = $file =~ s/d02/d03/gr; 
    rename $file, $newName; 
} 

Dadurch werden alle *d02* Dateien *d03* Dateien (On-Disk) umbenennen.

+0

Dank @Perl Hund –

+0

Dank @ikegami für die Ergänzung. Ich bin immer noch nicht an das '/ r' gewöhnt. Ahhr. Und ich habe CamelCase benutzt. Schande über mich. Das tut mir leid. – PerlDuck

Verwandte Themen