Anzeige:
Ergebnis 1 bis 3 von 3

Thema: Dateiname im Skript ändern

  1. #1
    Registrierter Benutzer
    Registriert seit
    21.04.2001
    Beiträge
    79

    Dateiname im Skript ändern

    Hallo,
    bin gerade am fertigstellen eines Backupskriptes.
    Nach dem fertigstellen enthält der Dateiname folgendes format:

    Backup from Server ADs for domain xyz status ok

    Nun möchte ich die Textdatei in ein anderes Verzeichnis kopieren und das Backup from entfernen.
    Mein Skript sieht nun folgendermaßen aus:

    Code:
    for datei in $(ls -1 Backup*); do
    mv $datei | $(echo "$datei" |sed s/Backup from//g)
    done
    Nun gibt mir die for Schleife jedes Wort separat aus.
    Sieht dann so aus:
    Backup
    from
    Server
    ADs
    ...

    Hm, hat jemand eine Ahnung warum dies so ist? Bin mir eigentlich sicher dieses vorgehen schon öfters gemacht zu haben. Wieso dies nun so ist, weiß das jemand?
    Geändert von oafish (16-05-2009 um 13:14 Uhr)

  2. #2
    Registrierter Benutzer Avatar von ContainerDriver
    Registriert seit
    10.01.2003
    Beiträge
    418
    Hallo,

    bist du dir bei deinem mv-Befehl sicher? Irgendwie sieht der nämlich komisch aus (besonders die Pipe).
    Der Befehl
    Code:
    mv "$datei" "$(echo $datei|sed 's/Backup from//g')"
    würde das machen, was du in deinem Text beschreibst.

    Gruß, Florian
    Ein gebrechlich Wesen ist der X-Server.

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.05.2007
    Beiträge
    656
    Moin,

    um eine for-Schleife für Dateinamen mit Leerzeichen verwenden zu können, musst Du IFS umsetzen, der trennt nämlich in seiner Standardeinstellung auch bei Leerzeichen. Die andere Variante ist stattdessen eine read-Schleife.

    Siehe auch hier: http://www.jan-trippler.de/de/script_tipps/loops.html

    Zu dem mv-Konstrukt hat ja ContainerDriver schon was geschrieben, den sed kannst Du Dir auch sparen, das kannst Du mit Shell-Mitteln lösen (spart Dir je Zeile einen extra Prozess):
    Code:
    jan@jack:~> F="Backup from file.txt"
    jan@jack:~> echo ${F#Backup from }
    file.txt
    Deine Schleife könnte also so aussehen:
    Code:
    ls Backup* | while read f; do
      mv "$f" "${f#Backup from }"
    done
    Beachte die "" um die Dateinamen - damit umgehst Du Fehler bei Dateien mit Leerzeichen.

    Zum Nachlesen: "man bash", hier nach "Command Substitution" (das, was ContainerDriver gemeint hat) und "Parameter Expansion" suchen.

    Jan

Lesezeichen

Berechtigungen

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