Faire un don ! | | style | statistiques | contactez-nous | plan | lettre d'information

Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : profondeur relative d'un fichier dans une arborescence

Posté par MilkaJinka () le 23 avril 2008
Bonjour,

Dans ma tentative de créer un script de gestion de site web à base de pages statiques, je cherche une manière de trouver à quelle profondeur dans l'arborescence se trouve un fichier donné. L'intérêt est de transformer automatiquement des liens absolus en liens relatifs, et de supprimer le besoin d'avoir un serveur web qui tourne en local pour développer son site.

Un exemple : la racine de mon site est à /home/utilisateur/site/. En y lançant mon script, une page dans /home/utilisateur/site/ aurait une profondeur de 1, une dans /home/utilisateur/site/linux/ aurait une profondeur de 2, etc. Avec cette information, je peux facilement transformer un lien du type href="/dossier/page.html" en href="dossier/page.html" ou href="../dossier/page.html"

Vous connaissez une manière d'extraire cette information ? tree et find ne m'ont rien donné...

--
Persiste.
> Lire le message (6 commentaires, moyenne: 2,3).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.

Un peu de perl

Posté par Christophe KINNE () le 23/04/2008 à 09:37. (lien). Évalué à 2.

Si je devais faire ça je procéderai de la manière suivante, avec un ptit bout de perl pour compter les / :

find ./ -name "*.*" | cut -d"/" -f2- | perl -e 'while(<>) { $l = $_; @arr = split(/\//); $l =~ s/\n//; $cnt = @arr; print $l.":".($cnt - 1)."\n" }'

Ou find recherche les fichiers,
cut -d"/" -fX- permet d'enlever la racine
et derrière un bout de perl qui compte le nombre de / et affiche le chemin relatif, deux points et le niveau

  • [^]Re: Un peu de perl

    Posté par gaaaaaAab () le 23/04/2008 à 14:15. (lien). Évalué à 6.

    on peut aussi compter les / à coup de
    tr -c '/' ' ' | tr -d ' ' | wc -c

    • [^]Re: Un peu de perl

      Posté par Christophe KINNE () le 23/04/2008 à 14:58. (lien). Évalué à 1.

      +1
      J'avais complètement oublié l'existence de tr... honte sur moi ;)

      • [^]Re: Un peu de perl

        Posté par gaaaaaAab () le 23/04/2008 à 19:32. (lien). Évalué à 2.

        ben ouais, c'est le forum programmation.shell quoi ! ;)

        cela dit, je fais le malin, mais il m'a fallu un man tr, vu que je ne connaissais ni l'option -c, ni l'option -d ...

        Du coup, merci pour la question MilkaJinka ;)

    • [^]Re: Un peu de perl

      Posté par MilkaJinka () le 23/04/2008 à 15:50. (lien). Évalué à 1.

      Super le coup de tr, c'est parfaitement ce que je cherchais :-)

      Accessoirement, ça m'a permis de contourner un problème dans une boucle for (en tout cas sous Busybox) : les noms de fichier avec des espaces s'affichaient sur plusieurs lignes, ce qui est problématique pour les traiter :


      for fichier in $(find . -type f)
      do
      echo "$fichier"
      done


      Ce code affichait "./un nom de fichier avec des espaces" comme ceci (alors qu'un find dans la console les affiche correctement) :
      ./un
      nom
      de
      fichier
      avec
      des
      espaces

      --
      Persiste.
    • [^]Re: Un peu de perl

      Posté par gaaaaaAab () le 25/04/2008 à 16:50. (lien). Évalué à 2.

      et même encore mieux !
      tr -d -c '/' | wc -c
      parce que tr est bien conçu =)

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell