Transformer "/foo/../bar" en "/bar&

santiago69 Messages postés 485 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
salut a tous,
existe-t-il une fonction pour obtenir un chemin d'acces "propre" a partir de n'importe quelle adresse. Par exemple :
/foo/../bar/    ->  /bar/
/foo/.          ->  /foo/

Merci d'avance
Santiago

--

Il y a 10 types de personnes dans le monde
Ceux qui comprennent le binaire et les autres.

4 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Un truc du genre :
    [tmpfs]$ echo -e "$A\n$B\n$C\n$D"
    /foo/../bar/
    /foo/.
    /foo/bar
    /foo/../../../bar/beau
    
    [tmpfs]$ echo -e "$A\n$B\n$C\n$D" | sed 's#\(.*/\).*#\1#;s#.*\(/.*/$\)#\1#'
    /bar/
    /foo/
    /foo/
    /bar/
    
    [tmpfs]$
    ;-))
    0
  2. santiago69 Messages postés 485 Statut Membre 209
     
    Interessant mais ca ne marche pas du tout 8-) Les chemins "propres" devraient etre :
    /foo/../bar/            ->  /bar
    /foo/.                  ->  /foo
    /foo/bar                ->  /foo/bar
    /foo/../../../bar/beau  ->  /bar/beau

    J'ai eu une proposition interessante sur un autre forum https://www.unix.com/
    $ path='/foo/bar/../beau'
    $ path=$(cd "$path"; pwd)
    $ echo path
    /foo/beau

    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      sed 's#.*\\.\\.##;s#[./]*$##'
      en ne laissant qu'un antislash "\" devant les points, mise en forme du forum oblige ;-((

      ;-))
      0
  3. santiago69 Messages postés 485 Statut Membre 209
     
    Ca ne marche toujours pas chez moi :o(
    Pourtant j'ai enleve les double \.

    Mais j'ai trouve deux solution :
    readlink qui est de base dans ma distribution (debian 4.0)
    realpath que j'ai installe avec aptitude
    $ readlink -e /foo/../bar///beau/
    /bar/beau
    $ realpath /foo/../bar///beau/
    /bar/beau

    realpath offre l'avantage de pouvoir suivre ou pas les liens symboliques (-s pour ne pas suivre) et de pouvoir resoudre plusieurs chemins a la fois (en les separant pas des /000 avec -z)

    Merci quand meme. D'ailleurs, je ne comprends rien a cette syntaxe de sed.
    Santiago
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ben chez moi elle marche ma syntaxe :
    [tmpfs]$ echo -e "$A\n$B\n$C\n$D" | sed 's#.*\\.\\.##;s#/.*$##'
    /bar
    /foo
    /foo/bar
    /bar/beau
    [tmpfs]$ 
    ;-))
    0