# Arborescence de répertoire



## ArrowIV (22 Décembre 2010)

Cette question a déjà été posée mais sans réponse satisfaisante.
J'ai trouvé cette commande unix pour développer graphiquement une arborescence:

ls -R | grep ":$" |      sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
# 1st sed: remove colons
# 2nd sed: replace higher level folder names with dashes
# 3rd sed: indent graph three spaces
# 4th sed: replace first dash with a vertical bar
if [ `ls -F -1 | grep "/" | wc -l` = 0 ]   # check if no folders
   then echo "   -> no sub-directories"
   fi

Cette cmde affiche les dossiers ET les fichiers qu'ils contiennent.
je voudrais savoir comment modifier cette cmde pour n'afficher QUE LES DOSSIERS et pas les fichiers qu'ils contiennent car ça fait une tartine trop longue.
J'en aurais besoin juste pour avoir l'architecture du disque Système et essayer de la comprendre.

Merci pour votre attention


----------



## bompi (22 Décembre 2010)

Tu pourrais utiliser l'utilitaire _tree_.


----------



## edd72 (22 Décembre 2010)

ls -R*D* | grep ":$" |      sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'


----------



## bompi (22 Décembre 2010)

```
ls: illegal option -- D
usage: ls [-ABCFGHLOPRSTUWabcdefghiklmnopqrstuwx1] [file ...]
```



Je pense que tu pensais à '*d*'. Mais chez moi ça ne donne rien.


----------



## edd72 (22 Décembre 2010)

Non, je parlais bien de D (l'option existe dans le ls du Shell de Snow Leopard) mais en fait ça n'apporte rien de plus (rien à voir, c'est pour le formattage), la commande:
ls -R | grep ":$" |      sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
n'affichant déjà QUE les répertoires chez moi (OS X 10.6, du bash donc), le grep filtrant les fichiers (en ne gardant que les lignes qui se terminent par ":", c'est à dire les répertoires).

Donc, j'avoue ne pas bien comprendre la question.


----------



## bompi (22 Décembre 2010)

Bizarre.
Je n'ai pas d'option '-D' avec le _ls_ de Snow Leopard.

Quant à la ligne de commande, elle semble ramener uniquement les répertoires en effet


----------



## edd72 (22 Décembre 2010)

La version de mon LS:

```
[ edd MiniToto ~ ] ls --version

ls (GNU coreutils) 8.4
Copyright © 2010 Free Software Foundation, Inc.
License GPLv3+ : GNU GPL version 3 ou ultérieure
<http://gnu.org/licenses/gpl.html>
Ceci est logiciel libre, vous êtes libre de le modifier et de le redistribuer.
Ce logiciel n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE, dans les limites
autorisees par la loi applicable.
Écrit par Richard M. Stallman et David MacKenzie.
```

Tu es à jour?


----------



## ArrowIV (22 Décembre 2010)

edd72 a dit:


> Non, je parlais bien de D (l'option existe dans le ls du Shell de Snow Leopard) mais en fait ça n'apporte rien de plus (rien à voir, c'est pour le formattage), la commande:
> ls -R | grep ":$" |      sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
> n'affichant déjà QUE les répertoires chez moi (OS X 10.6, du bash donc), le grep filtrant les fichiers (en ne gardant que les lignes qui se terminent par ":", c'est à dire les répertoires).
> 
> Donc, j'avoue ne pas bien comprendre la question.



C'est vrai, ça ne sort QUE les dossiers; en fait il y a une kyrielle de dossiers avec "." (genre .nib), ll faut que je les élimine et j'aurai ENFIN une réponse propre avec les seuls dossiers comme affichés avec Finder.


----------



## bompi (22 Décembre 2010)

Donc les besoins initiaux étaient mal exprimés 

@edd72 : si tu fais 
	
	



```
which -a ls
```
 ça te dit quoi ?


----------



## edd72 (22 Décembre 2010)

ArrowIV ,C'est bien de vouloir faire de la ligne de commande mais faut quand même avoir des bases...

grep -v affiche les lignes en non concordance avec le motif (dans ton cas le motif sera "commence par ."). Donc avec une redirection (|) là-dedans, tu élimines les repertoires débutants par .

Le truc, c'est que ta commande n'affiche déjà pas les répertoires començant par .
Puisque ton LS n'a pas l'option a (ls -Ra t'afficherait ces répertoires commençant par . mais pas là)

Alors expliques nous donc ce que tu fais en fait? Tu nous parles d'un pb de listage de fichiers qu'il n'y a pas, puis un problème de répertoires començant par un point qui ne se pose pas non plus avec ta commande...

---------- Nouveau message ajouté à 17h27 ---------- Le message précédent a été envoyé à 17h25 ----------




bompi a dit:


> Donc les besoins initiaux étaient mal exprimés
> 
> @edd72 : si tu fais
> 
> ...




/opt/local/bin/ls


Cela dit, j'ai installé Xcode et d'autres trucs pour fink, je n'utiliserai donc pas le même ls??

---------- Nouveau message ajouté à 17h35 ---------- Le message précédent a été envoyé à 17h27 ----------

En effet, le ls d'OSX semble disposer de moins d'option que celui standard d'Unix:
http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man1/ls.1.html
http://unixhelp.ed.ac.uk/CGI/man-cgi?ls
Par contre, pourquoi ai-je toutes les options, je ne sais pas.


----------



## bompi (22 Décembre 2010)

Note que "le _ls_ standard d'UNIX", je ne sais pas si ça existe 

Dans ton chemin, tu as donc _/opt/local/bin_ avant _/bin_, ce qui est un choix éventuellement discutable. Pour moi, Fink s'installait dans _/sw_ et MacPorts dans _/opt_.

Bref, effectivement, tu as le _ls_ de GNU, pas celui d'Apple, qui est sans doute hérité de celui de FreeBSD. 
C'est sur Linux que l'on trouve les outils de GNU par défaut.


----------



## edd72 (22 Décembre 2010)

Alors ce doit être MacPort, sans doute car j'ai eu à compiler Dolphin: http://code.google.com/p/dolphin-emu/wiki/MacOSX_Build

Tu sais comment lister toutes les commandes avec leur localisation sur le disque (pour détecter tout ce qui est hors de /bin et comment réaffecter ça?

[EDIT]
OK, j'ai ça dans mon .login

# MacPorts Installer addition on 2010-05-27_at_13:34:37: adding an appropriate PATH variable for use with MacPorts.
export PATH=/opt/local/bin:/opt/local/sbin:$PATH
# Finished adapting your PATH environment variable for use with MacPorts.

Et ça dans mon $PATH
/usr/local/mysql/bin:/sw/bin:/sw/sbin:/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/opt/X11/bin:/usr/X11/bin
[/EDIT]

Faudra que je fasse gaffe avant de poster des scripts pour OSX...


----------



## bompi (22 Décembre 2010)

Une commande toute seule, non.
Mais il te suffit de regarder le chemin ($PATH), d'isoler les chemins ajoutés (ceux de Fink, de MacPorts, de MySQL etc.) et de lister toutes les commandes qui s'y trouvent.

Il n'est pas gênant d'avoir plusieurs fois la même commande. Ce qui est gênant est de ne pas être sûr de celle qui va être lancée.
En général, je préfère que, par défaut, les commandes installées par le système soient choisies et, lorsque je veux spécifiquement utiliser une version ajoutée, je crée un alias ou des scripts dans lesquels le chemin est modifié. Cela évite certaines mauvaises surprises


----------

