Umlaute script

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von chr1s, 07.12.2006.

  1. #1 chr1s, 07.12.2006
    Zuletzt bearbeitet: 07.12.2006
    chr1s

    chr1s Jungspund

    Dabei seit:
    07.12.2006
    Beiträge:
    11
    Zustimmungen:
    0
    hallo erstmal:)

    soll für die schule ein script entwickeln das folgendes leisten soll:
    Entwickeln Sie ein bash-script, welches in einem anzugebenden verz nach dateinamen mit umlauten und oder leerzeichen sucht und diese dann auf benutzerrückfrage in ein verträgliches format umbenennt.

    die problematik liegt bei den umlauten.
    in der konsole funktioniert das find kom wunderbar
    find /users/class/"$class"/"$user" -name "*ä*" > umleer.tmp
    sobald ich das aber versuche zu scripten läuft es nicht mehr...

    komm nicht weiter wegen den umlauten...
    hier mein anfang:
    Code:
    #!/bin/sh
    #trap....
    #script zum suchen und umbenennen von dateien mit umlauten und leerzeichen
    
    echo "|><><><   Script zum suchen nach Umlauten und Leerzeichen   ><><><|"
    echo "Verzeichniss angeben(nix für $HOME):"
    read verz
    if [ -z "$verz" ] ; then
        class=`groups`
        user=`whoami`
        echo "Suchen nach Dateien in /users/class/$class/$user..."
        find /users/class/"$class"/"$user" -name " " > umleer.tmp
        find /users/class/"$class"/"$user" -iname "*ä*" >> umleer.tmp
        find /users/class/"$class"/"$user" -iname "*ö*" >> umleer.tmp
        find /users/class/"$class"/"$user" -iname "*ü*" >> umleer.tmp
        cat umleer.tmp
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -name " " > umleer.tmp
        find "$verz" -iname "*ä*" >> umleer.tmp
        find "$verz" -iname "*ö*" >> umleer.tmp
        find "$verz" -iname "*ü*" >> umleer.tmp
        cat umleer.tmp
    fi
    
    
    exit 0
    
    vielen dank im vorraus...
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    hilft bei der Fehlersuche nicht weiter. Kommen Fehlermeldung oder ...? Deswegen erstmal nur ne Vermutung: ändere die Shebang mal in #!/bin/bash.

    Bezüglich Deines Skriptes muss ich noch folgendes anmerken: es ist nicht wirklich effizient, find 4x aufzurufen. Besser ist folgendes:

    Code:
    find "$verz" -iname "* *" -or -iname "*ä*" -or -iname "*ö*" -or -iname "*ü*" ...
    
    Gruss, Xanti
     
  4. chr1s

    chr1s Jungspund

    Dabei seit:
    07.12.2006
    Beiträge:
    11
    Zustimmungen:
    0
    thx

    es kommt keine fehlermeldung
    mit set -x kommt:

    Code:
    bbt?????@ux-09:~/ben/scripte/projekt> umlaute.sh
    + echo '|><><><   Script zum suchen nach Umlauten und Leerzeichen   ><><><|'
    |><><><   Script zum suchen nach Umlauten und Leerzeichen   ><><><|
    + echo 'Verzeichniss angeben(nix f▒r /users/class/bbt???/bbt?????):'
    Verzeichniss angeben(nix f▒r /users/class/bbt???/bbt?????):
    + read verz
    
    + '[' -z '' ']'
    ++ groups
    + class=bbt???
    ++ whoami
    + user=bbt?????
    + echo 'Suchen nach Dateien in /users/class/bbt???/bbt?????...'
    Suchen nach Dateien in /users/class/bbt???/bbt?????...
    + find /users/class/bbt???/bbt????? -name ' '
    + find /users/class/bbt???/bbt????? -iname '*▒*'
    + find /users/class/bbt???/bbt????? -iname '*▒*'
    + find /users/class/bbt???/bbt????? -iname '*▒*'
    + cat umleer.tmp
    + exit 0
    
    
    die problematik ist das die umlaute nicht erkannt werden...
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Welchen Editor nutzt Du? Wahrscheinlich wird im falschen Zeichensatz gespeichert. Werden bei cat umlaute.sh die Umlaute richtig angezeigt?
     
  6. chr1s

    chr1s Jungspund

    Dabei seit:
    07.12.2006
    Beiträge:
    11
    Zustimmungen:
    0
    benutze scite
    bei cat .... kommt nix
    hab ma die kodierung auf utf-8 umgestellt und was kleines zum teste3n geschrieben
    Code:
    #!/bin/sh
    find $HOME -iname "*ä*"
    
    , jetzt sagt der mir aber:
    Code:
    -bash ./test.sh: cannot execute binary file
    
     
  7. chr1s

    chr1s Jungspund

    Dabei seit:
    07.12.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Code:
    + find /users/class/bbt???/bbt????? -iname '* *' -o -iname '*�' -o -iname '*�' -o -iname '**'
    
    der will die zeichen einfach nicht erkennen
     
  8. #7 Schlaubi_fi.de, 07.12.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Du benutzt ja noch immer die /bin/sh anstatt die /bin/bash wie von Xanti
    empfohlen...wenn Du es mit der /bin/bash probiert hast und es nicht geht,
    poste doch bitte deren Version.
    Welches Betriebsystem/Umgebung hast Du?
     
  9. caba

    caba GESPERRT!

    Dabei seit:
    13.08.2002
    Beiträge:
    351
    Zustimmungen:
    0
    Wieso nicht einfach:
    Code:
    rename 's/ä/ae/;s/ö/oe/;s/ü/ue/' *
    usw. halt
     
  10. chr1s

    chr1s Jungspund

    Dabei seit:
    07.12.2006
    Beiträge:
    11
    Zustimmungen:
    0
    hmm...
    werd aus der man von rename nicht schlau...
    kannste das ma erklaeren...?!
     
  11. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Vielleicht liegt das Problem auch an der Spracheinstellung. Gib doch in der Konsole, in der der 'find'-Befehl funktioniert, mal 'echo $LC_ALL' ein. Was kommt dabei raus?
    Das Entsprechende kannst Du dann als erstes in Dein Skript mitaufnehmen mittels
    'export LC_ALL="DE"' oder so
    (ich benutze immer "C", daher weiss ich nicht, wie der richtige Code lauten muss).
     
  12. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Wenn Probleme mit Umlauten bestehen, wird ein rename das Problem auch nicht lösen.

    Gruss, Xanti
     
  13. #12 Wolfgang, 14.12.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Es liegt natürlich an der Umgebungsvariable des verwendeten Zeichensatzes.
    Wenn du das als script laufen lässt, ist diese unter Umständen nicht auf den gewünschten Wert gesetzt.
    Beherzigst du dagegen den Vorschlag von Schlaubi_fi.de, dann garantierst du den richtigen Zeichensatz.

    Desweiteren frage ich mich, wie du den Zeichensatz auf utf8 ungestellt hast.
    In der Shell sicher nicht. ;)
    Du kannst natürlich auch nur zeichensätze verwenden, deren Schriften vorhanden sind!

    Gruß Wolfgang
     
  14. #13 root1992, 14.12.2006
    root1992

    root1992 von IT-Lehrern besessen

    Dabei seit:
    02.01.2006
    Beiträge:
    1.138
    Zustimmungen:
    0
    Ort:
    Märchenwald
    Speicher mal das .sh (ich denke mal du benutzt ein KDE-Programm (z.B. kwrite)) mit einer anderen Codierung.

    Ansonsten welchen Zeichensatz benutzt dein Bsys? Dann kannst du es ja auch irgentwie numerisch (z.B. 65=A (ASCII-Tabelle)) angeben.
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 chr1s, 15.12.2006
    Zuletzt bearbeitet: 15.12.2006
    chr1s

    chr1s Jungspund

    Dabei seit:
    07.12.2006
    Beiträge:
    11
    Zustimmungen:
    0
    erstmal vielen dank für die hilfe!top

    hab das mit dem umlauten jetzt hinbekommne...:
    hab das in utf-8 konvertiert und dann wieder in 8 bit

    Code:
    #!/bin/bash
    #trap....
    #script zum suchen und umbenennen von dateien mit umlauten und leerzeichen
    
    echo " Script zum suchen nach Umlauten und Leerzeichen  "
    echo "Verzeichniss angeben nix fuer $HOME:"
    read verz
    
    if [ -z "$verz" ] ; then
        class=`groups`
        user=`whoami`
        echo "Suchen nach Dateien in /users/class/$class/$user..."
        find /users/class/"$class"/"$user" -iname "* *" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" > umleer.tmp
        #cat umleer.tmp
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -iname "* *" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" > umleer.tmp
        #cat umleer.tmp
    fi
    
    anz=`wc -l<umleer.tmp`
    i=1
    while [ $i -le $anz ] ; do
        zeile=`head -$i umleer.tmp | tail -1`
        echo "+"
        echo "$zeile"
        i=`expr $i + 1`
    done
    
    exit 0
    
    funktioniert :-)
    aber ist ja noch nicht fertig...
    gibts nicht ne einfache möglichkeit die umlaute zu ersetzen anstelle die zeilen ausschneiden, dann den text splitten, ersetzen und wieder zusammensetzen (mit schleifen)...

    (der benutzer soll je datei gefragt werden ob die datei umbenannt werden soll)

    wie zb mit rename?
     
  17. #15 Wolfgang, 15.12.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Klar geht das etwas einfacher.

    Du könntest z.B. ein solches Verfahren anwenden, damit hast du auch die Leerzeichenproblematik abgefangen.
    Codefragment ohne Übergabeparameterprüfung und Dialog:
    Code:
    
    find $VERZ -type f|while read FILENAME;
    do
    if [ $(echo $FILENAME|grep -iq "äüöß") ]; then
    echo "Umlaute gefunden";
    #Fragedialog etc..
    ...
    NEWNAME=$(echo $FLENAME|sed -e 's/Ä/Ae/g;s/ä/ae/g;s/ü/ue/g;s/Ü/Ue/g;s/Ö/Oe/g;s/ö/oe/g;s/ß/sz/g')
    mv $FILENAME $NEWNAME;
    ...
    
    fi
    
    Nur so als Denkanstoß
    Mit Perl geht das noch besser. ;)
    Aber das ist ja nicht relevant bei deinen Hausaufgaben.

    Gruß Wolfgang
     
Thema:

Umlaute script

Die Seite wird geladen...

Umlaute script - Ähnliche Themen

  1. Umlaute Filtern

    Umlaute Filtern: Hi zusammen, bin recht neu was UNIX Skripten angeht und hänge gerade bei etwas fest. Ich möchte eine Datei erstellen in welche ein Befehl kommt....
  2. Umlaute mit Grafiktool

    Umlaute mit Grafiktool: Halli, ich moechte gern ein Tool bzw eine Anwendung, mit der ich die Umlaute mit Klicks einfuegen kann. Distribution ist Knoppix.
  3. Umlaute (ö,ä,ü) trotz UTF-8 falsch dargestellt auf Red Hat 6.3 Santiago

    Umlaute (ö,ä,ü) trotz UTF-8 falsch dargestellt auf Red Hat 6.3 Santiago: Hallo zusammen:-) Ich lese mit einem PERL-Script auf einem Linux Redhat 6.3 Server Informationen aus einem Exchange-Kalender aus. Dies...
  4. OpenSuse 12.1 KDE 4.7.2 keine Umlaute mehr

    OpenSuse 12.1 KDE 4.7.2 keine Umlaute mehr: Hallo zusammen. Ich weiß, dass dieses Thema schon oft diskutiert wurde. Allerdings verstehe ich die Problematik nicht wirklich. Seit einem Update...
  5. Keine Umlaute in Textdateien

    Keine Umlaute in Textdateien: Hallo Allerseits, mag eine Anfängerfrage sein, aber ich finde keine einfache Lösung: Hier läuft ein englisch-installiertes Debian (Backtrack...