1 2 3 4
my $datei_name = 'alles alles geht vorbei (ABCDE).mp3'; #Dateiname in Variable $datei_name =~ s/[)]//g; # entferne alle ) $datei_name =~ s/[\s(]/_/g; # ersetze alle Leerzeichen und ( druch _ $datei_name =~ s/_{2,}/_/g; # ersetze mehr als zwei _ durch einen _
1 2 3 4 5 6 7 8 9 10
# Verzeichnis öffnen opendir(my $dirh, $dir) || die "can't opendir $dir: $!"; my @files = grep { # Suche alle -f "$dir/$_" # Einträge, die Dateien sind (Dateiflag -f) } readdir $dirh; # welche aus Verzeichnis gelesen werden closedir $dirh; # Verzeichnis schließen
1 2
$datei_name =~ s/[)]//g; # entferne alle ) $datei_name =~ s/[\s(]/_/g; # ersetze alle Leerzeichen und ( und ) druch _
1 2 3 4 5
my $dateiname = '!alles alles.geht vorbei (ABCDE)?.mp3'; my ($name, $ext) = $dateiname =~ /\W*(.*?)\W*(\.\w+)?$/; $name =~ s/[\W_]+/_/g; $dateiname = $name.($ext || ''); print $dateiname;
2014-01-09T09:22:10 GwenDragon
1 2 3
my $name = "alles alles geht vorbei (ABCDE).mp3"; $name =~ tr/a-zA-Z0-9._//c; say $name;
$name =~ tr/a-zA-Z0-9./_/cs;
1
2
3
opendir( DIR, $input_dir ) || die "Can't open dir $input_dir: $!";
my @mp3 = grep { /\.mp3/ } readdir(DIR);
closedir DIR;
2014-01-09T12:48:06 rasidrasidEmpfehlungen und Tutorials wären super.
2014-01-09T12:48:06 rasidrasidIch hatte diese Array (also alle Dateien sind jetzt in dieser Array)
Code: (dl )1
2
3opendir( DIR, $input_dir ) || die "Can't open dir $input_dir: $!";
my @mp3 = grep { /\.mp3/ } readdir(DIR);
closedir DIR;
Wie müsste ich weiter programmieren, das was ihr vorgeschlagen habt, um jetzt die Dateien in der @mp3 nachträglich wie gewünscht zu verändern?
1 2 3 4 5
foreach (@mp3) { tr/a-zA-Z0-9./_/cs; # ersetze alles außer a-z, A-Z, 0-9 und '.' durch ein einzelnes '_' s/_\././g; # entferne '_' vor '.' s/^_//; # entferne '_' am Anfang }
2014-01-09T14:34:52 rasidrasidHallo,
Danke eigentlich funktioniert es, doch ändert das Programm zb die Datei
ee aa cc.mp3 in ee_aa_cc.mp3
aber es speichert es anscheinend nicht so im Verzeichnis. Führe ich danach ein ls -l aus, so kommt wieder die Datei ee aa cc.mp3
2014-01-09T12:48:06 rasidrasidIch hatte diese Array (also alle Dateien sind jetzt in dieser Array)
Code: (dl )1
2
3opendir( DIR, $input_dir ) || die "Can't open dir $input_dir: $!";
my @mp3 = grep { /\.mp3/ } readdir(DIR);
closedir DIR;
Wie müsste ich weiter programmieren, das was ihr vorgeschlagen habt, um jetzt die Dateien in der @mp3 nachträglich wie gewünscht zu verändern?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
use strict; use warnings; use File::Copy qw(move); my $input_dir = ...; my $output_dir = ...; opendir(my $dh, $input_dir) or die "Can't open dir $input_dir: $!"; my @mp3 = grep { /\.mp3/ } readdir($dh); closedir $dh or die "Can't close dir $input_dir: $!"; foreach my $fn_old (@mp3) { my $fn_new = $fn_old; # filtere den neuen Filenamen $fn_new =~ tr/a-zA-Z.0-9/_/cs; $fn_new =~ s/_\././g; # verschiebe die Datei move("$input_dir/$fn_old","$output_dir/$fn_new") or die "move of '$fn_old' failed: $!"; }
2014-01-10T07:46:55 MuffiWenns wenigstens irgendwie Arrays @from, @to unterstützen würde...
my @to_strings = map {tr/a-zA-Z/A-Za-z/r} @from_strings;
2014-01-09T13:06:21 MuffiIch hab tr schon ewig nicht mehr benutzt.
Irgendwie hats wenig Mehrwert zu s, ist dafür aber viel eingeschränkter.
Wenn du jetzt beliebig viele dieser Zeichen durch EIN "_" ersetzen willst darfst du schon wieder alles umbaun.
$name =~ tr/a-zA-Z0-9._//cd;
2014-01-09T14:34:52 rasidrasidHallo,
Danke eigentlich funktioniert es, doch ändert das Programm zb die Datei
ee aa cc.mp3 in ee_aa_cc.mp3
aber es speichert es anscheinend nicht so im Verzeichnis. Führe ich danach ein ls -l aus, so kommt wieder die Datei ee aa cc.mp3