auf Unix-Ordner zugreifen mit Umlauten

  • Wie kann ich mit einem Perl-Skript unter Unix auf Dateien bzw. Ordner zugreifen, die Umlaute enthalten?

    Beispiel - wenn ich mich zu dem Ordner hinstell und "cd A -> Tabulator" eingebe, kommt folgende Anzeige:

    cd A9.14\ U\314\210ber\ die\ Arbeit/

    Wenn ich aber genau diesen String so wie er da oben steht direkt eingebe (also jedes Zeichen getipselt ohne Tabulator), meint er der Ordner existiert nicht.

    Wenn ich ein ls mache, wird der Ordner so dargestellt:

    A9.14 UÌber die Arbeit

    Was muss ich da in das Skript eingeben, damit ich auf diesen Ordner zugreifen kann?

    Johanna Schmidt
    VIS1 Übungsleitung
    CG Vorlesung

  • Ich hab keine elegante Lösung, aber sie sollte funktionieren.

    Also, wenn du den Namen eh hast und ihn nur nicht ins Skript schreiben kannst, dann benutz doch einfach die Shell-Substitution, die du vielleicht auch schon bei anderen Befehlen in anderer Form genutzt hast ("rm -rf *", und der Stern wird ersetzt durch das, was grad drin steht).

    Demnach, z.B.:

    ls A9.14??ber?die?Arbeit
    (wo das Fragezeichen einzelne Zeichen ersetzt), oder

    ls A9*Arbeit, oder A9.14*
    (wo ein ganzer Block von Zeichen ausgelassen wird.)

    je nachdem, wie genau die String-Angabe sein muss (wenns mehrere Ordner mit mehreren Namen gibt). Im Prinzip müsste es möglich sein, die Ausgabe der Shell-Kommandos in eine Variable zu speichern, die dann den Verzeichnisnamen im richtigen Format enthält.

    "Egbert B. Gebstadter is the Egbert B. Gebstadter of indirect self-reference." - Egbert B. Gebstadter

  • Zitat von J.Petso

    Ich hoffe, das funktioniert auch mit Perl, aber sollte schon, oder?

    war auch mein erster gedanke. aber so wie die bash das macht, funktioniert es in perl nicht. die bash ersetzt zunächst im argument die platzhalter durch eine liste von pfadnamen. danach führt es mit je einem dieser pfadnamen als argument das kommando aus. dh in einem verzeichnis mit dateien ha und hu wird aus

    Code
    $ printf "A %s B \n" h*


    folgendes:

    Code
    printf "A %s B \n" ha
    printf "A %s B \n" hu


    die ausgabe ist dann natürlich:

    Code
    A ha B
    A hu B


    dh. jedes kommando (wie hier printf) bekommt immer nur 1 pfad/dateinamen auf einmal zu sehen.

    die perl-kommandos chdir und ähnliche erwarten, so viel ich weiß ein bestimmtes verzeichnis ohne wildcards.

    ideal wäre, wenn wir mehr infos zur problemstellung bekämen. außerdem muss es ein problem mit den locale-einstellungen geben, oder der dateiname wurde falsch konvertiert (?). umlaute sind normalerweise kein problem.

    lg michi

  • Ich meinte nicht, dass Perl direkt Wildcards akzeptiert, sondern eher, dass man sie über die Shell indirekt trotzdem benutzen kann. Man kann doch in Perl Shell-Kommandos aufrufen, nein? Ich meine, es sollte doch möglich sein, die Ausgabe von 'ls A9.14*' in eine Variable zu speichern und die dann den Perl-Funktionen als Argument zu übergeben. Das sollte eigentlich die Problematik mit dem richtigen Eingabeformat beseitigen...
    [edit: Ursprünglicher Post jetzt etwas deutlicher formuliert.]

    "Egbert B. Gebstadter is the Egbert B. Gebstadter of indirect self-reference." - Egbert B. Gebstadter

  • Zitat von J.Petso

    Ich meinte nicht, dass Perl direkt Wildcards akzeptiert, sondern eher, dass man sie über die Shell indirekt trotzdem benutzen kann. Man kann doch in Perl Shell-Kommandos aufrufen, nein? Ich meine, es sollte doch möglich sein, die Ausgabe von 'ls A9.14*' in eine Variable zu speichern und die dann den Perl-Funktionen als Argument zu übergeben. Das sollte eigentlich die Problematik mit dem richtigen Eingabeformat beseitigen...

    ach so... ich denke schon, ja. es gibt laut meinem perl-buch sogar ein shell-modul, mit dessen hilfe man shell-kommandos wie perl-routinen verwenden kann. weiß aber nicht, ob das kuschelmaus weiterhilft, da sie uns noch immer nichts genaueres verraten hat :coolsmile

    lg michi

  • das mit den Wildcards hab ich mir auch schon gedacht, das muß ich ausprobieren, ob das aus Perl heraus geht. ein weiterer Gedanke war auch, dass ich die komischen Zeichen im Perl eingebe - dieses Í lässt sich ja darstellen. mal schaun

    ich dank euch auf alle fälle für eure hilfe - ich will euch nur nicht näher damit beschäftigen, weil es geht dabei nicht um mein studium sondern um meine arbeit :) wollt mir nur im forum ein paar neue ideen holen.

    Johanna Schmidt
    VIS1 Übungsleitung
    CG Vorlesung

  • Zitat von Kuschelmaus

    ich dank euch auf alle fälle für eure hilfe - ich will euch nur nicht näher damit beschäftigen, weil es geht dabei nicht um mein studium sondern um meine arbeit :) wollt mir nur im forum ein paar neue ideen holen.

    kein problem.. solltest du durch unsere bahnbrechenden ideen plötzlich echt viel geld verdienen, denk halt auch an uns :D

    edit: nein im ernst: wäre interessant zu erfahren, wie es dann irgendwann ausgeht..

    lg michi

  • Zitat von michi204

    kein problem.. solltest du durch unsere bahnbrechenden ideen plötzlich echt viel geld verdienen, denk halt auch an uns :D


    aber klar doch, ich werd doch nicht auf meine treuen berater aus dem forum vergessen :)

    aber wenns dich interessiert schreib ich die lösung hier rein sobald ich eine gefunden habe

    lg, johanna

    Johanna Schmidt
    VIS1 Übungsleitung
    CG Vorlesung

  • so, der vollständigkeit halber: wie versprochen hier die (pfusch)lösung:

    da es mein unix-guru-kollege auch nicht geschafft, der SUN beizubringen, die umlaute richtig darzustellen, haben wir uns für eine pfuschlösung entschieden.

    im perl-skript werden in dem string mit dem dateinamen die verhunzten umlaute durch wildcards ersetzt. perl selbst kann mit wildcards nicht auf dateien zugreifen, die shell schon. daher stellt das skript einen cp-Befehl zusammen, der die datei in einen apache-ordner (mit einem dateinamen wo die umlaute und sonderzeichen durch _ ersetzt sind) kopiert. dieser befehl wird dann aus dem perl heraus mit qx(.) durch die shell ausgeführt. und mit perl kann man dann auf die kopierte datei zugreifen und sie weiter verarbeiten.

    ist etwas unsauber das ganze, keine frage, aber es funktioniert :)

    lg, johanna

    Johanna Schmidt
    VIS1 Übungsleitung
    CG Vorlesung

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!