Thread Leerzeichen und Anderes aus Dateinamen entfernen (22 answers)
Opened by rasidrasid at 2014-01-09 10:05

clms
 2014-01-09 16:12
#172929 #172929
User since
2010-08-29
373 Artikel
BenutzerIn
[default_avatar]
2014-01-09T14:34:52 rasidrasid
Hallo,

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


Nein, die Beispiele ändern natürlich nicht die Datei sondern nur den ausgelesenen Dateinamen in der Variablen. Die Datei und das Verzeichnis werden dabei selbstverständlich nicht verändert.

2014-01-09T12:48:06 rasidrasid
Ich hatte diese Array (also alle Dateien sind jetzt in dieser Array)
Code: (dl )
1
2
3
opendir( 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?

Nein, das Array enthält keine Dateien, nur die Dateinamen.

Was Du haben willst ist wahrscheinlich so etwas (ungetestet)
Code (perl): (dl )
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: $!";
}

View full thread Leerzeichen und Anderes aus Dateinamen entfernen