Schrift
[thread]7833[/thread]

relative Pfadangaben umwandeln: x/y/../z => x/z



<< >> 10 Einträge, 1 Seite
pktm
 2006-03-28 01:08
#64120 #64120
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!

Hat zufällig schonmal jemand eine Lösung (z.B. eine RegEx) dafür gebaut wie man aus Pfaden im Format x/y/../z den intendierten Zielpfad machen kann? Ich abe das Problem, dass ich manchmal bis zu 4 mal ../ in einer Pfadangabe stehen habe (damit ich meine Scripten besser auf die Server im Internet übertragen kann ohne viel anpassen zu müssen).

Gibt es dafür vielleicht ein Snipplet oder ein Modul? Ansonsten muss ich es mir selber bauen.

Grüße, pktm
http://www.intergastro-service.de (mein erstes CMS :) )
esskar
 2006-03-28 02:20
#64121 #64121
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
CPAN:Path::Class
Code: (dl )
1
2
use Path::Class qw(dir);
print dir('/foo/../dir/')->cleanup;

aber vorsicht, das modul erzeugt einen OS spezifischen pfad, heißt unter windows werden die / zu \
ptk
 2006-03-28 02:46
#64122 #64122
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Also bei mir macht das nichts:
Code: (dl )
1
2
3
use Path::Class qw(dir);
print dir('/tmp/../usr/')->cleanup;
/tmp/../usr

Und es ist auch klar warum: wenn es irgendwo symbolische Links gibt, dann gilt nicht zwangsläufig die Gleichung /A/../B == /B
Dubu
 2006-03-28 11:03
#64123 #64123
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Wenn es um reale Pfade geht, kann man es herausfinden. Und das Standardmodul Cwd macht es auch:
Code: (dl )
1
2
$ perl -Mstrict -Mwarnings -MCwd=realpath -le 'print realpath "/tmp/../usr/";'
/usr
esskar
 2006-03-28 19:18
#64124 #64124
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=ptk,28.03.2006, 00:46]Und es ist auch klar warum: wenn es irgendwo symbolische Links gibt, dann gilt nicht zwangsläufig die Gleichung /A/../B == /B[/quote]
ist das in deinem fall jetzt so?
bei mir - unter windows - liefert obiges Snippet das Ergebnis \dir
ptk
 2006-03-28 23:55
#64125 #64125
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Klar, unter Windows gibt es auch keine Symlinks...
esskar
 2006-03-29 00:21
#64126 #64126
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ist klar.
aber die frage ist, löst cleanup unter linux die .. generell nicht auf?
ptk
 2006-03-29 00:28
#64127 #64127
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Siehe mein Beispiel oben. Es wurde nur das letzte Slash entfernt.
esskar
 2006-03-29 00:38
#64128 #64128
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=ptk,28.03.2006, 22:28]Siehe mein Beispiel oben. Es wurde nur das letzte Slash entfernt.[/quote]
es hätte ja sein können, dass das gerade an deinem system liegt, weil du irgendetwas verlinkt hast und du damit ein Gegenbeispiel geben wolltest!
ptk
 2006-03-29 02:54
#64129 #64129
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Path::Class guckt nicht im realen System nach. Aber Cwd::realpath (wie in Dubus Beispiel) scheint das zu machen.
<< >> 10 Einträge, 1 Seite



View all threads created 2006-03-28 01:08.