Rainer Langlitz: String in Kommandozeile korrigieren

Hallo Perlprofis,
ich schreibe gerade meine erstes Script :) und finde keine Lösung für folgende Anforderung:
Das Script bearbeitet die Dateinamen meiner MP3 Sammlung (kürzen, Sonderzeichen entfernen usw). Der zurechtgestutzt Dateinamen soll letztendlich dem Benutzer zur Korrektur vorgelegt werden. Ich möchte also einen String in die Kommandozeile schreiben, dort bearbeiten und mit Return den veränderten String wieder einlesen. Mein Lösungsansatz war <STDIN> einen String vorzugeben, ich finde dazu aber nichts im Web.
Hat jemand eine Idee wie das Problem anzugehen ist?

Gruß
Rainer

  1. Hallo Perlprofis,

    ich schreibe gerade meine erstes Script :) und finde keine Lösung für folgende Anforderung:
    Das Script bearbeitet die Dateinamen meiner MP3 Sammlung (kürzen, Sonderzeichen entfernen usw). Der zurechtgestutzt Dateinamen soll letztendlich dem Benutzer zur Korrektur vorgelegt werden. Ich möchte also einen String in die Kommandozeile schreiben, dort bearbeiten und mit Return den veränderten String wieder einlesen. Mein Lösungsansatz war <STDIN> einen String vorzugeben, ich finde dazu aber nichts im Web.
    Hat jemand eine Idee wie das Problem anzugehen ist?

    hi,
    probier mal das hier, ich sag schomal tschüss, Rolf

    ==================
    #!/usr/bin/perl

    Dateinamen vorschlagen...

    $dir = "/hot";
    $ndir = "/hot/newfilenames";
    $ext = "mp3";

    use File::Copy;

    lese Verzeichnis

    opendir DIR, "." or die $!;
    my @files = grep { -f "$dir/$_"}readdir DIR;
    closedir DIR;

    Anzahl ermitteln

    my $x = scalar @files;

    Fuer jede Datei die Auswahl zeigen und je nach Input

    die Datei benennen und in anderes Verzeichnis copieren...

    for($i = 0; $i < $x; $i++){
     print "Filename: $files[$i], Vorschlag: 00$i.$ext, Enter y/n or own filename\n";
     $in = <STDIN>;
     chomp $in;
     if($in eq "y"){
      my $nfilename = "00$i.$ext";
      copy $files[$i], "$ndir/$nfilename";
     }
     elsif($in eq "n"){}
     else{
      my $nfilename = $in;
      chomp $nfilename;
      copy $files[$i], "$ndir/$nfilename";
     }
    }

    1. Hallo Rolf,
      sorry, ich habe mich undeutlich ausgedrückt. Das eigentliche Script ist bereits fertig. Es grast rekursiv den Verzeichnisbaum ab und zieht Datei- und Verzeichnisnamen glatt. (Dank an die Autoren der lehrreichen Codefetzen aus dem Forumsarchiv. Ich habe viel gelernt an diesem Wochenende.)

      Was ich noch suche, ist eine Möglichkeit den vorgeschlagenen Dateinamen zu editieren. Also den Vorschlag aus einer Variablen in die Kommandozeile schreiben, den Cursor darin bewegen, Zeichen löschen, Zeichen eingeben und dann mit Return zurück in eine Variable schreiben.

      Wie kann ich das angehen?

      Gruß
      Rainer