Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Comportement de ls.

23 réponses
Avatar
dominique
Bonjour,
Je voudrai compter des fichiers mp3 qui sont dans une arborescence de
répertoires :

[normal@localhost voice]$ ls -l
total 40
drwxr-xr-x 2 normal normal 4096 nov 10 08:12 16279_bien_commun
drwxr-xr-x 2 normal normal 4096 nov 15 10:14 2000_ans-histoire
drwxr-xr-x 2 normal normal 4096 nov 15 10:12 aspects_pensee_contemporaine
drwxr-xr-x 2 normal normal 4096 nov 15 10:13 enjeux_internationaux
drwxr-xr-x 2 normal normal 4096 nov 1 13:48 islam
drwxr-xr-x 2 normal normal 4096 nov 15 10:14 jacquard
drwxr-xr-x 2 normal normal 4096 nov 15 10:12 lundis_histoire
drwxr-xr-x 2 normal normal 4096 nov 10 08:09 science_conscience
drwxr-xr-x 2 normal normal 4096 nov 10 08:13 vendredis_de_la_philosophie
drwxr-xr-x 2 normal normal 4096 nov 15 10:12 vivants_et_les_dieux

À la racine de l'arborescence, je tape :

[normal@localhost voice]$ ls -R *mp* | wc -l
2

En fouillant un peu, je constate que le motif *mp* n'est pas recherché
dans mp3 mais dans le nom d'un seul répertoire (conteMPoraine) par ls :

[normal@localhost voice]$ ls -R *mp*
aspects_pensee_contemporaine:
10344-11.11.2007-ITEMA_20096350-0.mp3

wc -l fait son boulot en comptant 2 lignes qui sortent de ls.

D'où, ma question : quels argument et motif passer à ls avec wc -l pour
ne compter que les fichiers qui ont le motif souhaité, en l'occurrence mp3.
Je vous remercie,
Dominique

10 réponses

1 2 3
Avatar
Steph
Bonjour,
Je voudrai compter des fichiers mp3 qui sont dans une arborescence de
répertoires :

[ voice]$ ls -l
total 40
drwxr-xr-x 2 normal normal 4096 nov 10 08:12 16279_bien_commun
drwxr-xr-x 2 normal normal 4096 nov 15 10:14 2000_ans-histoire
drwxr-xr-x 2 normal normal 4096 nov 15 10:12 aspects_pensee_contemporaine
drwxr-xr-x 2 normal normal 4096 nov 15 10:13 enjeux_internationaux
drwxr-xr-x 2 normal normal 4096 nov 1 13:48 islam
drwxr-xr-x 2 normal normal 4096 nov 15 10:14 jacquard
drwxr-xr-x 2 normal normal 4096 nov 15 10:12 lundis_histoire
drwxr-xr-x 2 normal normal 4096 nov 10 08:09 science_conscience
drwxr-xr-x 2 normal normal 4096 nov 10 08:13 vendredis_de_la_philosophie
drwxr-xr-x 2 normal normal 4096 nov 15 10:12 vivants_et_les_dieux

À la racine de l'arborescence, je tape :

[ voice]$ ls -R *mp* | wc -l
2

En fouillant un peu, je constate que le motif *mp* n'est pas recherché
dans mp3 mais dans le nom d'un seul répertoire (conteMPoraine) par ls :

[ voice]$ ls -R *mp*
aspects_pensee_contemporaine:
10344-11.11.2007-ITEMA_20096350-0.mp3

wc -l fait son boulot en comptant 2 lignes qui sortent de ls.

D'où, ma question : quels argument et motif passer à ls avec wc -l pour
ne compter que les fichiers qui ont le motif souhaité, en l'occurrence mp3.
Je vous remercie,
Dominique



essaye :

find -name "*.mp3" | wc -l

ls -R *.mp3 | wc -l

Avatar
Fabien LE LEZ
On Thu, 15 Nov 2007 10:47:32 +0100, dominique :

En fouillant un peu, je constate que le motif *mp* n'est pas recherché
dans mp3 mais dans le nom d'un seul répertoire (conteMPoraine) par ls :


Ben oui, si tu tapes

une_commande_quelconque *mp*

le shell convertit le "*mp*" en la liste des fichiers du répertoire
courant.

Ici, le seul fichier correspondant est "aspects_pensee_contemporaine".
Par conséquent, le shell traduit ta commande en :

une_commande_quelconque aspects_pensee_contemporaine

D'où, ma question : quels argument et motif passer à ls avec wc -l pour
ne compter que les fichiers qui ont le motif souhaité, en l'occurrence mp3.


La commande ls est bien moins utile qu'il n'y paraît. Dans pas mal de
cas, il faut la remplacer par "find".

En l'occurence, si tu cherches le nombre de fichiers (fichiers réels
uniquement) dont le nom contient "*mp*", tu écriras :

find -name "*mp*" -type f | wc -l

Avatar
Fabien LE LEZ
On Thu, 15 Nov 2007 11:43:27 +0100, Steph :

ls -R *.mp3 | wc -l


Ça ne fonctionnera pas mieux. Ou alors, il faut rajouter des
guillemets quelconques quelque part.

Avatar
Steph
On Thu, 15 Nov 2007 11:43:27 +0100, Steph :

ls -R *.mp3 | wc -l


Ça ne fonctionnera pas mieux. Ou alors, il faut rajouter des
guillemets quelconques quelque part.


Oui oui, tu as raison. A la rigueur ls -R | grep "mp3" mais pas du tout
efficace par rapport au find.


Avatar
dominique
find -name "*.mp3" | wc -l


[ voice]$ find -name "*mp3" | wc -l
29
[ voice]$ find -name "*mp*" -type f | wc -l
29

Ça marche ! Merci à vous deux.
Bon après-midi,
Dominique
PS : il faudra quand même que je m'intéresse à find un jour ou l'autre ;-)

Avatar
dominique
Oui oui, tu as raison. A la rigueur ls -R | grep "mp3" mais pas du
tout efficace par rapport au find.


Mouais... pas très probant :

[ radio_france]$ ls -R | grep mp3 | grep wc -l
[ radio_france]$ ls -R | grep "mp3" | grep wc -l
[ radio_france]$

find avec name paraît plus efficace.
Bon après-midi,
Dominique

Avatar
Thierry B.
--{ dominique a plopé ceci: }--

find -name "*.mp3" | wc -l


[ voice]$ find -name "*mp3" | wc -l
29
[ voice]$ find -name "*mp*" -type f | wc -l
29

Ça marche ! Merci à vous deux.


Modulo des répertoires répondant aussi au motif '*.mp3' que
l'on peut filtrer en demandant à find de n'afficher que les
vrais fichiers avec l'option "-type f".


--
1) Les FAQ sur le fonctionnement de usenet sont en charte sur fbq
C'est écrit où ? Il y a une FAQ f.b.questions mais elle est postée dans

f.u.reponses
--{ Faque qui peut }--


Avatar
moi-meme
dominique wrote:

D'où, ma question : quels argument et motif passer à ls avec wc -l pour
ne compter que les fichiers qui ont le motif souhaité, en l'occurrence
mp3. Je vous remercie,
pour ma part j'aurais essayé

tree -f <point du haut> | grep <motif> | wc -l

C'est beau, bien, correct, moyen, supportable, passable, abominable,
horrible, honteux ?

(rayer la mention inutile)

Avatar
Fabien LE LEZ
On Thu, 15 Nov 2007 13:42:57 +0100, dominique :

[ radio_france]$ ls -R | grep mp3 | grep wc -l


Sans le deuxième grep, ça devrait fonctionner beaucoup mieux.
Là, tu recherches la chaîne "wc" dans le résultat, et forcément, ça ne
donne pas grand-chose.

Avatar
Fabien LE LEZ
On Thu, 15 Nov 2007 17:22:20 +0100, moi-meme :

pour ma part j'aurais essayé
tree -f <point du haut> | grep <motif> | wc -l


Ça ne fonctionne pas sur ma machine. J'imagine qu'il faut installer
quelque chose, mais bon, comme find fonctionne, je ne vais pas
chercher plus loin...

En fait, find, comme rsync, fait partie de ces utilitaires qu'il faut
bien connaître, car ils rendent énormément de services.

De même que rsync doit être le premier réflexe dès qu'on veut copier
des fichiers (même si cp sert bien pour des trucs simples), le premier
réflexe dès qu'on veut connaître la liste des fichiers qui ont telle
ou telle propriété, est "find".

1 2 3