[HS] Un "ls" en résumé
Le
stephane.gargoly

Bonjour à tous les utilisateurs et développeurs de Debian :
Comme vous le savez sans doute, un répertoire peut éventuellement=
contenir des fichiers (f - en sens classique du terme), des liens symboliq=
ues (l), des tubes nommés (p), des sockets (s), des nÅ“uds de pÃ=
©riphériques en mode caractère (c) ou bloc (b) voire des sous-r=
épertoires (d).
Nous avons déjà la commande 'ls' qui nous permet d'afficher le co=
ntenu d'un répertoire (avec plus ou moins de détail selon qu'on a=
djoint ou non l'option '-l').
Seulement, cette commande nous fait la liste de ce tout que contient un r=
épertoire. Or je recherche une commande qui me permet seulement de m'i=
ndiquer le nombre de fichiers, des liens symboliques, de sous-répertoi=
res, etc. que l'on peut trouver dans un répertoire.
De plus, de façon optionnelle, cette commande pourrait nous apporter c=
ette information de manière récursive au cas où un répe=
rtoire contiendrait des sous-répertoires (un peu à la manièr=
e d'un "du -s" pour l'occupation disque totale d'un répertoire).
A priori, d'après mes recherches (dans les "man pages" en particulier)=
, ce type de commande ne semble pas exister (du moins, pas de manière =
simple ou directe), ce que je trouve assez étonnant car je pense que c=
e type d'information peut être intéressante à bien des Ã=
©gards
Cela étant dit, corrigez-moi si je me trompe car il est possible que j=
e ne suis pas allé là où je devrais y pointer mon nez. ;-)
Sinon, je crains que je devrais passer par un "script bash" (c'est-Ã -d=
ire un fichier dont le contenu commence par "#!/bin/bash" et qui liste tout=
e une série de commande à exécuter).
En attendant, j'ai déjà conçu la commande suivante :
"find /dir -type f -prune | grep -c [[:print:]] | sed 's$ f'
qui permet de nous informer le nombre de fichiers que peut contenir le rÃ=
©pertoire '/dir'.
En supprimant l'option -prune de find (et, donc, en incluant ses évent=
uels sous-répertoires), on aura le nombre total de fichiers.
Bien sûr, si /dir ne contient aucun fichier, la commande nous donnera =
"0 f".
Enfin, en remplaçant (au niveau de find et de sed) f par l (ou s) par =
exemple, on aura le nombre de liens symboliques (ou de sockets).
Cependant, si quelqu'un (de notre liste de discussion) a une meilleure id=
ée que moi (par rapport à la commande que j'ai mise au point), qu=
'il n'hésite pas à me faire savoir
En attendant, je vais continuer la conception de mon script bash et je vous=
donnerai des mes nouvelles prochainement.
Cordialement et à bientôt,
Stéphane.
Une messagerie gratuite, garantie à vie et des services en plus, Ã=
§a vous tente ?
Je crée ma boîte mail www.laposte.net
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/2033395854.245767.1378109871013.JavaMail.www@wwinf8311
Comme vous le savez sans doute, un répertoire peut éventuellement=
contenir des fichiers (f - en sens classique du terme), des liens symboliq=
ues (l), des tubes nommés (p), des sockets (s), des nÅ“uds de pÃ=
©riphériques en mode caractère (c) ou bloc (b) voire des sous-r=
épertoires (d).
Nous avons déjà la commande 'ls' qui nous permet d'afficher le co=
ntenu d'un répertoire (avec plus ou moins de détail selon qu'on a=
djoint ou non l'option '-l').
Seulement, cette commande nous fait la liste de ce tout que contient un r=
épertoire. Or je recherche une commande qui me permet seulement de m'i=
ndiquer le nombre de fichiers, des liens symboliques, de sous-répertoi=
res, etc. que l'on peut trouver dans un répertoire.
De plus, de façon optionnelle, cette commande pourrait nous apporter c=
ette information de manière récursive au cas où un répe=
rtoire contiendrait des sous-répertoires (un peu à la manièr=
e d'un "du -s" pour l'occupation disque totale d'un répertoire).
A priori, d'après mes recherches (dans les "man pages" en particulier)=
, ce type de commande ne semble pas exister (du moins, pas de manière =
simple ou directe), ce que je trouve assez étonnant car je pense que c=
e type d'information peut être intéressante à bien des Ã=
©gards
Cela étant dit, corrigez-moi si je me trompe car il est possible que j=
e ne suis pas allé là où je devrais y pointer mon nez. ;-)
Sinon, je crains que je devrais passer par un "script bash" (c'est-Ã -d=
ire un fichier dont le contenu commence par "#!/bin/bash" et qui liste tout=
e une série de commande à exécuter).
En attendant, j'ai déjà conçu la commande suivante :
"find /dir -type f -prune | grep -c [[:print:]] | sed 's$ f'
qui permet de nous informer le nombre de fichiers que peut contenir le rÃ=
©pertoire '/dir'.
En supprimant l'option -prune de find (et, donc, en incluant ses évent=
uels sous-répertoires), on aura le nombre total de fichiers.
Bien sûr, si /dir ne contient aucun fichier, la commande nous donnera =
"0 f".
Enfin, en remplaçant (au niveau de find et de sed) f par l (ou s) par =
exemple, on aura le nombre de liens symboliques (ou de sockets).
Cependant, si quelqu'un (de notre liste de discussion) a une meilleure id=
ée que moi (par rapport à la commande que j'ai mise au point), qu=
'il n'hésite pas à me faire savoir
En attendant, je vais continuer la conception de mon script bash et je vous=
donnerai des mes nouvelles prochainement.
Cordialement et à bientôt,
Stéphane.
Une messagerie gratuite, garantie à vie et des services en plus, Ã=
§a vous tente ?
Je crée ma boîte mail www.laposte.net
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-REQUEST@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmaster@lists.debian.org
Archive: http://lists.debian.org/2033395854.245767.1378109871013.JavaMail.www@wwinf8311
Un truc du genre
ls -l | grep ^d | wc -l
te donne le nombre de répertoires dans le répertoire courant. Ce n'est
pas ce que tu recherche ? Ensuite à toi de modifier le grep selon tes
besoins.
Juste une piste hein..
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Dans son message du 02/09/13 à 10:40, steve a écrit :
Bravo, pour avoir le nombre de fichier dans un répertoire (surtout si on fait de manière récursive), ta solution semble beaucoup plus r apide.
La preuve (par l'intermédiaire de la commande 'time') :
a) avec "find /usr -type f -prune | grep -c [[:print:]] | sed 's$ f", on trouve 258057 fichiers en 170 s en moyenne.
b) avec "ls -Ral /usr | grep ^- | wc -l | sed 's$ f", on a le même résultat mais en moins de 5 s soit 30 fois moins longtemps... ;-)
J'ai fait le même test pour avoir le nombre de sous-répertoires ( ou de liens symboliques) dans /usr et la solution avec ls semble plus rapid e (quoique l'écart soit moins grand, seulement 5 et 3 fois moins de fa çon respective) que la solution avec find.
Seul soucis et il concerne le nombre de sous-répertoires (de /usr) : j 'ai 18741 avec find mais 56222 avec ls (soit 3 fois plus). :-(
Cordialement et à bientôt,
Stéphane.
Une messagerie gratuite, garantie à vie et des services en plus, à §a vous tente ?
Je crée ma boîte mail www.laposte.net
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Bonjour
Cette différence ne serait-elle pas du aux liens symboliques que ls
prendrait en compte, à la différence de find ?
--
jean-marc
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Parce que ls te donne "." et ".." avec chaque répertoire...
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Pour éviter cela, il ne faut pas mettre l'option 'a' dans le ls.
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Bien vu !
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/
Dans son message du 02/09/13 à 14:54, steve a écrit :
Sauf que la commande ls sans l'option "-a" nous éviterait bien les r épertoires . et .. (ce qui est bien) mais également les répe rtoires dont le nom commence par "." (autrement dit les répertoires ca chés) et ça, cela est moins bon.
Une solution serait d'ajouter l'option "-A" Ã la commande "ls -a".
Cependant, j'ai remarqué un inconvénient avec ls (par rapport à find) :
- avec la commande "find / -mount -type f", on aura la liste de fichiers co ntenus dans le répertoire / et ses sous-répertoires qui font part ie de la même partition ou système de fichier que / (autrement di t l'option -mount exclut les sous-répertoires qui sont des points de m ontage),
- tandis qu'avec la commande ls et à ma connaissance, il n'est pas pos sible d'avoir le même résultat.
Donc je vais devoir rester avec find (qui offre plus de possibilités), ce qui est dommage car ls est plus rapide. :-(
Cordialement et à bientôt,
Stéphane.
Une messagerie gratuite, garantie à vie et des services en plus, à §a vous tente ?
Je crée ma boîte mail www.laposte.net
--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists
Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers
En cas de soucis, contactez EN ANGLAIS
Archive: http://lists.debian.org/