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?
auf Unix-Ordner zugreifen mit Umlauten
-
-
edit: blödsinn geschrieben, sorry..
lg michi
-
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), oderls 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.
-
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
folgendes:
die ausgabe ist dann natürlich:
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.] -
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.
-
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
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
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 -
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
-
danke
lg michi
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!