Script Dateien kopieren/umbenennen

Dieses Thema im Forum "Linux-Distributionen" wurde erstellt von SchneeMann3000, 21. Mai 2005.

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. SchneeMann3000

    SchneeMann3000 ROM

    Registriert seit:
    19. August 2003
    Beiträge:
    6
    Hallo,

    ich habe folgendes Problem:
    Ich habe einen Ordner in dem befinden sich etliche Dateien mit der Endung *.doc! Nun brauche ich ein Script das mir einfach nur eine leere Datei aus allen *.doc Dateien erstellt mit dem Namen *.bak

    Folgendes habe ich ausprobiert und ist genau das was ich brauche, aber es funktioniert nicht, wenn die Dateien Leerzeichen enthalten und das tun etliche Dateien leider :-(

    for i in $(ls *.doc); do touch $i ${i%.*}.bak; done

    Weiss jemand wie ich das umschreiben muss das es auch mit Leerzeichen funktioniert? Also ohne Leerzeichen geht es!!!

    Ich hoffe ihr könnt mir helfen ich verzweifle grad. :aua: Kenn mich mit der Bash leider nicht gut aus.

    Vielen Dank schon einmal im vorraus
     
  2. cirad

    cirad Kbyte

    Registriert seit:
    24. Februar 2001
    Beiträge:
    509
    for a in *.doc; do touch "${a%.doc}.bak"; done
     
  3. Affirmation

    Affirmation Kbyte

    Registriert seit:
    16. März 2005
    Beiträge:
    152
    Du musst den $IFS (=internal field separator, Spezialvariable zur Erkennung zwischen Programmname und Parametern -> Standardmäßig das Leerzeichen) umsetzen:

    #!/bin/bash
    IFS=$'\n';
    for i in $(ls *.doc); do
    touch $i ${i%.*}.bak;
    done;
    IFS=$' ';

    Zunächst wird das auf eine neue Zeile gesetzt (das Zeichen is ja bei Dateinamen nicht legal, daher ideal), und dann die for-Schleife durchlaufen.
    Am Ende setzt du das wieder auf den normalen Fall zurück.
     
  4. SchneeMann3000

    SchneeMann3000 ROM

    Registriert seit:
    19. August 2003
    Beiträge:
    6
    Danke das funktioniert :)

    @Affirmation

    Was macht eigentlich das
    IFS=$'\n';
    und
    IFS=$' ';

    Kenne mich leider nur sehr schlecht aus :(

    Also danke
    Gruß
    snowman
     
  5. cirad

    cirad Kbyte

    Registriert seit:
    24. Februar 2001
    Beiträge:
    509
    Hilfe, nein. Gewöhn dir das mit IFS am besten ab. In seinem Fall hätten einfach "" um die Variablen gereicht. Ich hatte ihm nur die komplett neue Zeile hingeschrieben, weil das mit dem touch fehlerhaft und mit dem $(ls *doc) absolut unnötig war.

    Und wenn du schon irgendwo zeilweise einlesen willst, dann tut es auch ein while read a; do ...

    @Affirmation
    > Was macht eigentlich das [...]
    IFS ist eine Variable, deren Inhalt die SH oder Bash als Trennzeichen für das Erweitern benutzt. So wird beispielsweise bei $* die Ausgabe der einzelnen Parameter mit dem ersten Zeichen in IFS getrennt.

    Hier wird IFS geändert, damit nur Zeilenweise (Newline als Trennzeichen) und nicht Wortweise (Leerzeichen oder Tab als Trennzeichen) vorgegangen wird. Da sich IFS aber eben auch auf anderes auswirkt, sollte man sowas nicht tun, zumal es hier unnötig ist.
     
Status des Themas:
Es sind keine weiteren Antworten möglich.

Diese Seite empfehlen