Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Dateinamen bearbeiten

  1. #1
    Registrierter Benutzer
    Registriert seit
    22.05.2001
    Ort
    Emden
    Beiträge
    30

    Dateinamen bearbeiten

    Hallo liebe Gemeinde!

    Shell-Programmierung ist ja eine feine Sache. Das konnte ich schon mal feststellen.

    Doch nun mal eine Frage, die ich nicht beantworten kann.
    Wie müsste ein Script ausschauen, welches alle Dateien und Ordner ab einem bestimmten Verzeichnis (inklusive Unterverzeichnisse) in Kleinbuchstaben umwandelt?

    Das schaffe ich noch nicht mal ansatzweise.
    Und bei ein paar hundert Dateien und Unterverzeichnissen ist diese Angelegenheit per Hand doch etwas mühsam.

    Vielen Dank im voraus.

    mfg

    Torsten
    104 Tasten Maus.
    Tastatur mit Scrollrad

  2. #2
    Registrierter Benutzer
    Registriert seit
    24.03.2001
    Beiträge
    14
    Von Shell-Scripten versteh ich leider auch nicht viel.

    Aber zufällig habe ich ein Script, das eben genau das macht, was du willst.

    #!/bin/sh

    usage ()
    {
    echo Usage: `basename $0` [-r ] file... >&2
    exit 2
    }

    if [ $# -lt 1 ]
    then
    usage
    fi

    if [ "$1" = "-r" ]
    then
    recursive=1
    shift
    if [ $# -lt 1 ]
    then
    usage
    fi
    else
    recursive=0
    fi

    for i in "$@"
    do
    new=`echo $i | tr "[:upper:]" "[:lower:]"`
    if [ "$new" != "$i" ]
    then
    echo $i "->" $new >&2
    mv "$i" "$new"
    fi
    if [ $recursive = 1 -a -d "$new" ]
    then
    $0 -r "$new"/*
    fi
    done

    Speichere das einfach in einer Textdatei, mach diese mit chmod +x "dateiname" ausführbar und führ das Script mit ./dateiname -r * aus.
    Kernel 2.4.17-xfs
    Pentium 3 450 MHz
    GeForce 2 MX400
    256 MB RAM

  3. #3
    Registrierter Benutzer
    Registriert seit
    22.05.2001
    Ort
    Emden
    Beiträge
    30
    Moinsen!

    Ist ja unglaublich. Das ging aber schnell.
    Besten Dank dafür.

    Grüße

    Torsten
    104 Tasten Maus.
    Tastatur mit Scrollrad

  4. #4
    Registrierter Benutzer
    Registriert seit
    22.05.2001
    Ort
    Emden
    Beiträge
    30
    Moinsen!

    Hui, funzt astrein.
    Genau so hatte ich mir das vorgestellt.
    Nochmals besten Dank.

    Grüße

    Torsten
    104 Tasten Maus.
    Tastatur mit Scrollrad

  5. #5
    Registrierter Benutzer
    Registriert seit
    08.02.2002
    Ort
    Bremen
    Beiträge
    23
    Original geschrieben von Krelian
    if [ "$1" = "-r" ]
    Ich glaub ja nicht dass das so richtig ist

    Ich bin der, der ewig sucht und niemals findet.
    Mein Feld ist das Ergebnislose.


  6. #6
    Registrierter Benutzer
    Registriert seit
    24.03.2001
    Beiträge
    14
    Ich habe das Script nicht selber geschrieben, was soll denn daran falsch sein?
    Kernel 2.4.17-xfs
    Pentium 3 450 MHz
    GeForce 2 MX400
    256 MB RAM

  7. #7
    Registrierter Benutzer
    Registriert seit
    08.02.2002
    Ort
    Bremen
    Beiträge
    23
    if [ "$1" = "-r" ] ersetzt den ersten Kommandozeilenparameter $1 durch -r. Die if-Anweisung ist überflüssig weil eine Variablenzuweisung immer true ergibt und deswegen die Anweisung immer ausgeführt wird. Richtig wäre meines Erachtens if [ "$1" == "-r" ]. Für if [ $recursive = 1 -a -d "$new" ] gilt das gleiche. Das Script läuft so wie's jetzt ist wohl immer rekursiv mit allen Parametern. Außer ich hab 'ne Eigenart von sh übersehen die es in bash nicht mehr gibt, aber das wage ich zu bezweifeln.

    Ich bin der, der ewig sucht und niemals findet.
    Mein Feld ist das Ergebnislose.


  8. #8
    Registrierter Benutzer
    Registriert seit
    24.03.2001
    Beiträge
    14
    Wieder was dazugelernt

    Wenn ich jetzt noch wüsste, von wem ich dieses Script habe, würde ich ihm diese Verbesserung auch noch mitteilen...
    Kernel 2.4.17-xfs
    Pentium 3 450 MHz
    GeForce 2 MX400
    256 MB RAM

  9. #9
    Registrierter Benutzer
    Registriert seit
    24.12.2001
    Ort
    anywhere before EOF
    Beiträge
    236
    @Nighthawk:
    Da würd ich mal nicht soweit aus dem Fenster lehnen. Bei anderen Sprachen geb ich dir völlig Recht mit der Zuweisung wenn man "x = y" schreibt (abgesehen davon, dass man dann in BASH die Spaces die Quatas und das Dollar weg lassen müsste...) aber in BASH wenn man das macht über test und die eckigen Klammern sind nichts anderes als ein Aufruf von test anders ausgedrückt, dann werden Strings tatsächlich verglichen mit '=' als wahr ausgewertet wenn sie gleich sind und mit '!=' verglichen als wahr wenn sie ungleich sind.
    Wie es sich mit anderen Shells verhält weiss ich allerdings nicht aber in BASH ist das so, hab auch blöd geschaut, weil das etwas verwirrend ist, aber es ist so: man test
    Geändert von sticky bit (28-03-2002 um 16:20 Uhr)
    chmod -R +t /*

  10. #10
    Registrierter Benutzer
    Registriert seit
    08.02.2002
    Ort
    Bremen
    Beiträge
    23
    Bäh, das könnte sogar stimmen. Da gewöhnt man sich jahrelang ab in C++ diesen Fehler zu machen und dann sowas

    Ich bin der, der ewig sucht und niemals findet.
    Mein Feld ist das Ergebnislose.


Lesezeichen

Berechtigungen

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