Retourner aux forums || Retourner au forum Programmation.shell
Programmation.shell : profondeur relative d'un fichier dans une arborescence
Posté par MilkaJinka () le 23 avril 2008Dans 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.
Un peu de perl
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
-
-
[^]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
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell



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.