Anzeige:
Ergebnis 1 bis 4 von 4

Thema: dateien umbenennen

  1. #1
    Gast

    Post dateien umbenennen

    Hallo,
    ich habe folgendes Problem:
    Ich erstelle mp3-Dateien mit krabber. Das Ausgabeformat dieser Dateien
    sieht folgendermaßen aus: 01.\ .mp3 usw, also es befindet sich immer
    ein Leerzeichen zwischen den beiden Punkten. Nun soll durch ein Script
    dieses Leerzeichen und ein Punkt verschwinden, also die Datei soll hinter-
    her so aussehen: 01.mp3.
    Habe nun selbst schon versucht:
    #! /bin/bash

    for i in $(ls ??.\ .mp3) do
    mv $i.\ .mp3 $i.mp3
    done

    Ergebniss: syntax error in der Zeile mv $....
    Was mache ich hier falsch? Muss noch dazu sagen, dass ich in Sachen
    Shellprogrammierung ein absoluter Anfänger bin.
    Wer kann mir hier weiterhelfen?
    gruss
    andreas

  2. #2
    Registrierter Benutzer
    Registriert seit
    19.10.1999
    Ort
    Dresden
    Beiträge
    255

    Post

    Durch das Leerzeichen erhält "mv" vier !!! Argumente.

    Deine Datei ist bspw: "01 .mp3", damit expandiert die "mv"-Zeile zu

    <code>"mv 01 .mp3 01 .mp3.mp3"</code>

    Logisch, dass "mv" damit nichts anfangen kann, da "01" nicht existiert, also was bitte soll umbenannt werden?

    Der Schritt 1 wäre also, den Namen zu quoten:

    <code>mv "$i" ...</code>

    Problem ist nun der Zielname...hier hilft Dir die Parametersubstitution, d.h. Du musst den Dateinamen vor dem Leerzeichen abschneiden und ".mp3" anhängen. Folgende Zeile tut's:

    <code>mv "$i" ${$i% *}.mp3</code>

    Achtung: Zwischen "%" und "*" steht genau ein Leerzeichen!

    Thomas



    [Dieser Beitrag wurde von thommy am 20. September 2000 editiert.]

  3. #3
    pitu
    Gast

    Post

    Also, wenn ich das richtig verstanden habe, dann hast du dateien, die in etwa folgendermassen ausschauen:
    <pre>
    01. .mp3
    02. .mp3
    03. .mp3
    </pre>
    Und diese willst du umwandeln in
    <pre>
    01.mp3
    02.mp3
    03.mp3
    </pre>

    Deine for-Schleife liefert aber folgendes Ergebniss:
    <pre>
    tw@toto:~ > for i in $(ls ??.\ .mp3); do echo $i;done
    01.
    .mp3
    02.
    .mp3
    03.
    .mp3
    04.
    .mp3
    tw@toto:~ >
    </pre>

    Deine for-Schleife muss anders lauten:
    <pre>
    tw@toto:~ > for i in ??.\ .mp3; do echo $i;done
    01. .mp3
    02. .mp3
    03. .mp3
    04. .mp3
    tw@toto:~ >
    </pre>

    Also:
    <pre>
    tw@toto:~ > for i in 01 02 03 04; do touch $i.\ .mp3; done
    tw@toto:~ > ls *mp3
    01. .mp3 02. .mp3 03. .mp3 04. .mp3
    tw@toto:~ > for i in ??.\ .mp3; do mv "$i" `basename "$i" .\ .mp3`.mp3; done
    tw@toto:~ > ls *mp3
    01.mp3 02.mp3 03.mp3 04.mp3
    tw@toto:~
    </pre>

    Zur besseren Lesbarkeit habe ich in den Scripten das Leerzeichen in den Dateinamen als 2 Leerzeichen dargestellt.

    Anders ausgedrückt:
    <pre>
    0x. .mp3 = 0x. .mp3
    ./ .mp3 = ./ .mp3
    </pre>


    thorsten

    ------------------
    Thorsten Wandersmann
    SuSE GmbH, Nuernberg


    [Dieser Beitrag wurde von Thorsten Wandersmann am 20. September 2000 editiert.]

  4. #4
    Gast

    Post

    Danke thorsten,
    funzt einwandfrei.
    Auch herzlichen dank an thommy,
    konnte mit der erklärung meinen horizont erweitern.
    gruss
    ag

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •