Umlaute und so umbenennen... - ntfs probleme?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von ianders, 07.06.2008.

  1. #1 ianders, 07.06.2008
    Zuletzt bearbeitet: 11.06.2008
    ianders

    ianders Linux Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    112
    Zustimmungen:
    0
    Ort:
    Berlin
    Hallo,

    ich hatte mir mal vor einiger Zeit ein Script gebastelt, was auch für mich zufriedenstellend arbeitet. Ziel ist es Daten und Ordner mit Umlauten (Sonderzeichen, ...) zu finden und umzubenennen. Nun wollte ich das Script wieder anwenden - auf ext3 und FAT32 Partitionen kein Problem, aber auf der ntfs-Partition verweigert sich das Script vernünftig zu laufen. Also es geht zwar los aber beim Umbenennen kommt immer die Fehlermeldung:
    mv: Verschieben von [Pfad und alter Dateiname] nach [Pfad und neuer Dateiname] nicht möglich: Datei oder Verzeichnis nicht gefunden
    Ich verstehe nun nicht wie es zu diesem Fehler kommt.
    Das es zu dieser Fehlermeldung kommt wenn er den Ordner umbenannt hat bevor er die Dateien umbenennt (umgekehrt wäre besser, weiß aber gerade nicht wie) ist klar, aber das ist hier nicht der Fall, denn wenn ich die Daten auf eine andere Festplatte kopiere, dann läuft das Script wies soll.

    Code:
    #!/bin/bash
    trap 'test -d umlautetmp && rm -r umlautetmp; exit 1' 2
    #script zum suchen und umbenennen von dateien mit umlauten, apostoph und leerzeichen
    mkdir umlautetmp
    
    echo "Script zum suchen und Umbenennen von Umlauten. Apostroph UND Leerzeichen  "
    echo "Verzeichniss angeben aber ACHTUNG Achtung: nichs 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" -depth -iname "* *" -o -iname "*_*" -o -iname "*Ä*" -o -iname "*Ö*" -o -iname "*Ü*" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "ß" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "Ãœ*" -o -iname "*ß*" -o -iname "*Ä*" -o -iname "*´*" -o -iname "*´*" > umlautetmp/old.tmp
        #cat umleer.tmp
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -depth -iname "* *" -o -iname "*_*" -o -iname "*Ä*" -o -iname "*Ö*" -o -iname "*Ü*" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "ß" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "Ãœ*" -o -iname "*ß" -o -iname "*ß*" -o -iname "*Ä*"  -o -iname "*´*" -o -iname "*´*" > umlautetmp/old.tmp
        #cat umleer.tmp
    fi
    cat umlautetmp/old.tmp | sed -e 's/Ä/ae/g; s/Ö/oe/g; s/Ü/ue/g; s/ä/ae/g; s/ö/oe/g; s/ü/ue/g; s/ß/ss/g; s/ß/ss/g; s/ö/oe/g; s/ä/ae/g; s/ü/ue/g; s/Ãœ/ue/g; s/Ö/oe/g; s/ß/sz/g; s/Ãœ/ue/g; s/ß/ss/g; s/Ä/ae/g; s/Ä„/ae/g; s/ß/ss/g; s/ //g; s/_//g; s/Ä/ae/g; s/´//g; s/´//g' >umlautetmp/new.tmp
    
    anz=`wc -l<umlautetmp/old.tmp`
    i=1
    while [ $i -le $anz ] ; do
        oldzeile=`head -$i umlautetmp/old.tmp | tail -1`
        newzeile=`head -$i umlautetmp/new.tmp | tail -1`
        oldbasename=`basename "$oldzeile"`
        newbasename=`basename "$newzeile"`
        filetype=`file "$oldzeile" | cut -d: -f2`
        echo "$filetype '$oldbasename' in '$newbasename' umbenennen...?(y/n)"
        echo ' yes ? '
        read best
        if [ "$best" = y ] ; then
            mv "$oldzeile" "$newzeile"
        fi
        i=`expr $i + 1`
    done
    
    test -d umlautetmp && rm -r umlautetmp
    exit 0
    
    #-----ERRORCODES-----
    #1 -- CTRL + C abbruch 
    
    P.S.: also manuell die Daten und Ordner umbenennen geht, aber das wollte ich nicht machen, dafür sind es viel zu viele Daten...
    Edit 11.6.08:
    PPS.:
    Verwendetes System: Suse 10.3
     
  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. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Schuss ins blaue:
    - Deine ntfs Partitition readonly gemountet?
    - Mount als root, script als user ?
     
  4. #3 ianders, 08.06.2008
    Zuletzt bearbeitet: 08.06.2008
    ianders

    ianders Linux Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    112
    Zustimmungen:
    0
    Ort:
    Berlin
    ich kann beides leider ausschließen


    Könnte es sein dass der Befehl mv unter ntfs anders arbeitet??? bzw. dass das Script generell unter ntfs etwas anders arbeitet??? ich wüsste zwar keinen Grund, aber irgendwie muss es ja zu dieser Fehlermeldung kommen. Ich meine selbst wenn ich jetzt nur eine Testdatei in einem Ordner habe und dieser selbst auch keine weiteren Unterordner besitzt, kommt trotzdem die Fehlermeldung mv: Verschieben von [Pfad und alter Dateiname] nach [Pfad und neuer Dateiname] nicht möglich: Datei oder Verzeichnis nicht gefunden
    :hilfe2:
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    hab mal das Script ein bisschen verändert, jetzt kommt allerdings eine andere Fehlermeldung: mv: angegebenes Ziel „' [ Pfad und Name des neuen Dateinamens ] '“ ist kein Verzeichnis
    woran klemmt es denn jetzt? ?(
    Code:
    #!/bin/bash
    trap 'test -d umlautetmp && rm -r umlautetmp; exit 1' 2
    #script zum suchen und umbenennen von dateien mit umlauten, apostoph und leerzeichen
    mkdir umlautetmp
    
    echo "Script zum suchen und Umbenennen von Umlauten. Apostroph UND Leerzeichen  "
    echo "Verzeichniss angeben aber ACHTUNG Achtung: nichs 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" -depth -iname "* *" -o -iname "*_*" -o -iname "*Ä*" -o -iname "*Ö*" -o -iname "*Ü*" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "ß" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "Ãœ*" -o -iname "*ß*" -o -iname "*Ä*" -o -iname "*´*" -o -iname "*´*" > umlautetmp/old.tmp
        #cat umleer.tmp
    else
        echo "Suchen nach Dateien in $verz..."
        find "$verz" -depth -iname "* *" -o -iname "*_*" -o -iname "*Ä*" -o -iname "*Ö*" -o -iname "*Ü*" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "ß" -o -iname "*ä*" -o -iname "*ö*" -o -iname "*ü*" -o -iname "*ß*" -o -iname "Ãœ*" -o -iname "*ß" -o -iname "*ß*" -o -iname "*Ä*"  -o -iname "*´*" -o -iname "*´*" > umlautetmp/old.tmp
        #cat umleer.tmp
    fi
    cat umlautetmp/old.tmp | sed -e 's/Ä/ae/g; s/Ö/oe/g; s/Ü/ue/g; s/ä/ae/g; s/ö/oe/g; s/ü/ue/g; s/ß/ss/g; s/ß/ss/g; s/ö/oe/g; s/ä/ae/g; s/ü/ue/g; s/Ãœ/ue/g; s/Ö/oe/g; s/ß/sz/g; s/Ãœ/ue/g; s/ß/ss/g; s/Ä/ae/g; s/Ä„/ae/g; s/ß/ss/g; s/ //g; s/_//g; s/Ä/ae/g; s/´//g; s/´//g' >umlautetmp/new.tmp
    
    anz=`wc -l<umlautetmp/old.tmp`
    i=1
    while [ $i -le $anz ] ; do
        oldzeile=`head -$i umlautetmp/old.tmp | tail -1`
        newzeile=`head -$i umlautetmp/new.tmp | tail -1`
        oldbasename=`basename "$oldzeile"`
        newbasename=`basename "$newzeile"`
        filetype=`file "$oldzeile" | cut -d: -f2`
        echo "$filetype '$oldbasename' in '$newbasename' umbenennen...?(y/n)"
        echo ' yes ? '
        read best
        if [ "$best" = y ] ; then
            mv \'$oldzeile\' \'$newzeile\'
        fi
        i=`expr $i + 1`
    done
    
    test -d umlautetmp && rm -r umlautetmp
    exit 0
    
    #-----ERRORCODES-----
    #1 -- CTRL + C abbruch 
    
     
  5. #4 Gott_in_schwarz, 08.06.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Sollen wir uns jetzt extra ntfs-Partitionen erstellen, um dein Skript zu debuggen? 0o

    Mach doch mal "manuell" ein mv-Versuch auf der ntfs-Partition. Sprich benenne irgendeine Datei mit Umlauten mal um. (Respektive versuchs)
    Wenn das klappt mach mal'n Versuch mit ner abgespeckten Version des find-Einzeilers in Kombination mit mv. Funktionierts immernoch? Verstehst du das Prinzip? Klein anfangen, immer weiter aufbauen bis der Fehler kommt..

    Und bitte die Versuche (die "shell-Sitzung") möglichst im Wortlaut (Befehle und (Fehler-)Meldungen) hier posten.
     
  6. #5 ianders, 08.06.2008
    ianders

    ianders Linux Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    112
    Zustimmungen:
    0
    Ort:
    Berlin
    wenn ich vm so eingebe gehts:
    Code:
    ilja@linux-sijn:~/1TB_EXTERN/Sicherung_DatenREISER240GB/Programme/script> mv '/home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/- Ä # + ß 0 9 8 7 66  Ä Ö Ü_ * ?ß ? _=_)_(_%2f_&_%%_$_§__!' '/home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/oooooooooo'
    
    mit dem Script kommt das:
    Code:
    ilja@linux-sijn:~/1TB_EXTERN/Sicherung_DatenREISER240GB/Programme/script> ./umlautescripten3
    Script zum suchen und Umbenennen von Umlauten. Apostroph UND Leerzeichen
    Verzeichniss angeben aber ACHTUNG Achtung: nichs fuer /home/ilja:
    /home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/
    Suchen nach Dateien in /home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/...
     ASCII text '- Ä # + ß 0 9 8 7 66  Ä Ö Ü _ * ?ß ? _=_)_(_%2f_&_%%_$_§_!öööööööööööö' in '-ae#+ss098766aeoeue*?ss?=)(%2f&%%$§!oeoeoeoeoeoeoeoeoeoeoeoe' umbenennen...?(y/n)
     yes ?
    y
    mv: angegebenes Ziel „'/home/ilja/1TBEXTERN/SicherungDatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/-ae#+ss098766aeoeue*?ss?=)(%2f&%%$§!oeoeoeoeoeoeoeoeoeoeoeoe'“ ist kein Verzeichnis
     Vim swap file, version 7.1 '.- Ä # + ß 0 9 8 7 66  Ä Ö Ü .swp' in '.-ae#+ss098766aeoeue.swp' umbenennen...?(y/n)
     yes ?
    y
    mv: angegebenes Ziel „'/home/ilja/1TBEXTERN/SicherungDatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/.-ae#+ss098766aeoeue.swp'“ ist kein Verzeichnis
     ASCII text '1223 2 45  ä ö ü ß ü  ä - . ö ä ß 0 9 8 7 6 j m ö. ä ü  #ä ö ü ü ö' in '1223245aeoeuessueae-.oeaess09876jmoe.aeue#aeoeueueoe' umbenennen...?(y/n)
     yes ?
    y
    mv: angegebenes Ziel „'/home/ilja/1TBEXTERN/SicherungDatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/1223245aeoeuessueae-.oeaess09876jmoe.aeue#aeoeueueoe'“ ist kein Verzeichnis
     ASCII text '1223 2 45  ä ö ü ß ü ä - . ö ä ß 0 9 8 7 6 j m ö. ä ü  #ä ö ü ü öa' in '1223245aeoeuessueae-.oeaess09876jmoe.aeue#aeoeueueoea' umbenennen...?(y/n)
     yes ?
    y
    mv: angegebenes Ziel „'/home/ilja/1TBEXTERN/SicherungDatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/1223245aeoeuessueae-.oeaess09876jmoe.aeue#aeoeueueoea'“ ist kein Verzeichnis
     ASCII text '1223 2 45  ä ö ü ß ü ä - . ö ä ß 0 9 8 7 6 j m ö. ä ü  #ä ö ü ü ös' in '1223245aeoeuessueae-.oeaess09876jmoe.aeue#aeoeueueoes' umbenennen...?(y/n)
     yes ?
    y
    mv: angegebenes Ziel „'/home/ilja/1TBEXTERN/SicherungDatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/1223245aeoeuessueae-.oeaess09876jmoe.aeue#aeoeueueoes'“ ist kein Verzeichnis
     empty 'öäüßüäö üäöü' in 'oeaeuessueaeoeueaeoeue' umbenennen...?(y/n)
     yes ?
    y
    mv: angegebenes Ziel „'/home/ilja/1TBEXTERN/SicherungDatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/oeaeuessueaeoeueaeoeue'“ ist kein Verzeichnis
     empty 'öäüßüäöüä öü' in 'oeaeuessueaeoeueaeoeue' umbenennen...?(y/n)
     yes ?
    y
    mv: angegebenes Ziel „'/home/ilja/1TBEXTERN/SicherungDatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/oeaeuessueaeoeueaeoeue'“ ist kein Verzeichnis
     empty 'öäüßüäöüäöü' in 'oeaeuessueaeoeueaeoeue' umbenennen...?(y/n)
     yes ?
    y
    mv: Aufruf von stat für „'/home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/öäüßüäöüäöü'“ nicht möglich: Datei oder Verzeichnis nicht gefunden
    
     
  7. #6 Gott_in_schwarz, 08.06.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Grade mal das Skript "geskimmt", was soll denn das hier:
    Code:
    mv \'$oldzeile\' \'$newzeile\'
    Könntest du vielleicht mal die escapten single-quotes durch einfache double-quotes ersetzen?
    (kA, wenn das allerdings das Problem sein sollte, hätte das Skript eigentlich niemals funktionieren sollen..)
     
  8. #7 ianders, 08.06.2008
    ianders

    ianders Linux Jungspund

    Dabei seit:
    13.09.2006
    Beiträge:
    112
    Zustimmungen:
    0
    Ort:
    Berlin
    guck mal in der obersten Version vom Script, da sind es double-quotes allerdings kommt es dann zu der Fehlermeldung (siehe mein erstes Post)
    da es jedoch keinen Unterschied macht ob ich
    Code:
    ilja@linux-sijn:~/1TB_EXTERN/Sicherung_DatenREISER240GB/Programme/script> mv "/home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/öäüß" "/home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/oeaeuess"
    
    oder
    Code:
    ilja@linux-sijn:~/1TB_EXTERN/Sicherung_DatenREISER240GB/Programme/script> mv '/home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/- Ä # + ß 0 9 8 7 66  Ä Ö Ü_ * ?ß ? _=_)_(_%2f_&_%%_$_§__!' '/home/ilja/1TB_EXTERN/Sicherung_DatenREISER240GB/TTEESSTT/TEST/TTEESSTT/TEST1/oooooooooo'
    mache dachte ich, ich probier mal single-quotes
    und ohne quotes geht es gar nicht
    ich denke es liegt hier irgendwie an dieser Stelle, aber ich weiß nicht an was genau...
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 Gott_in_schwarz, 08.06.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Ja dann finde es heraus...
    Sprich: gehe sequenziell jede einzelne Anweisung einzeln durch in einer interaktiven Shell. Mit Variablen und Dateien. Guck dir an was in den Variablen/Dateien ist etc.

    Shell-Skripte debuggen ist unfassbar trivial.
     
  11. #9 Wolfgang, 09.06.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Ich bin es langsam leid, jedesmal auf das hier hinzuweisen. Das ist auch ein Grund, warum ich mich verstärkt mit Antworten zurückhalte.
    Bevor ich also meine Glaskugel rund laufen lass, versuch es mal mit den Boardregeln bezüglich meines Hinweises.
    Zu NTFS kann ich mangels eigener Erfahrung wenig beitragen.
    Allerdings solltest du als erstes mal die Mountoptionen auf verwendete nls-Option prüfen.
    Ehrlich gesagt, habe ich auch wenig Lust fremde Scripte zu debuggen.

    Deshalb hangel dich mit eingebautem echo $VARNAME an diversen Stellen durch.

    Wolfgang
     
Thema:

Umlaute und so umbenennen... - ntfs probleme?

Die Seite wird geladen...

Umlaute und so umbenennen... - ntfs probleme? - Ä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...