Salut !
Le formatage de la sortie de la commande
[code]$ ls -R
.:
autorun.inf dists install md5sum.txt pool README.mirrors.html README.txt
css doc live pics README.html README.mirrors.txt syslinux
./css:
debinstall.css debinstall-print.css
./dists:
frozen lenny stable testing unstable[/code]
ne me plaît pas du tout. On ne peut pas réutiliser ça avec un script. Ce qu’il faut c’est une sortie du genre :
./autorun.inf
./css/debinstall.css
./css/debinstall-print.css
./dists/frozen
./dists/lenny/main/binary-i386/...
./dists/lenny/main/debian-installer/...
./dists/lenny/Release
./dists/stable
./dists/testing
./dists/unstable
./md5sum.txt
Je rame un peu car je ne suis pas habitué aux langages de scripts. J’ai réussi à trouver une solution qui fonctionne à peu près mais qui est absolument horrible :
fichier lsrec.sh
[code]#!/bin/sh
Le premier argument contient le chemin du repertoire a lister.
Si le chemin n’est pas termine par un slash, en rajouter un.
echo $1 | sed ‘s%[^/]$%&/%’ > tmp1
echo “” > tmp2
tant qu’il reste des repertoires a derouler, executer lsrec.awk
while [ “cat tmp1
” != “cat tmp2
” ]; do
cat tmp1 | awk -f lsrec.awk > tmp2
cat tmp2 | awk -f lsrec.awk > tmp1
done[/code]
fichier lsrec.awk
[code]#!/usr/bin/awk -f
si une ligne n’est pas le nom d’un repertoire, ne rien faire
/[^/]$/ {print $0}
sinon, lister le repertoire en gardant bien tout le chemin grace a sed
//$/ {system(“ls -1p “”$0"” | sed ‘s%…*%"$0"&%’")}[/code]
Le principe c’est de faire des itérations comme ceci dans un fichier temporaire :
fichier tmp
fichier tmp
./binary/
./binary.img
./binary.list
./binary.packages
fichier tmp
./binary/autorun.inf
./binary/css/
./binary/dists/
./img
./list
./packages
fichier tmp
./binary/autorun.inf
./binary/css/debinstall-print.css
./binary/css/debinstall.css
./binary/dists/frozen
./binary/dists/lenny/
./binary/dists/stable
./binary/dists/testing
./binary/dists/unstable
./img
./list
./packages
et ainsi de suite
Si quelqu’un a une idée pour rendre ça plus propre, je suis preneur.