ACCUEIL Image Vidéo Musique Architecture Photographie Code
Minaw.net cover picture

Minaw.net

Code

Code source permettant le contrôle d'un rétroéclairage.

Compter ses lignes de code

Pour compter ses ligndes de code en shell, 18 juillet 2017 23:27

La commande de nos rêves est wordcount, abrégée wc. Pour compter les lignes d'un fichier, on utilise la commande wc -l.

Nous cherchons à compter les lignes de plusieurs fichiers. Ça tombe bien : la commande find va nous servir à lister les fichiers d'un répertoire donné. En gros, find /mon/super/dossier retourne une liste de tous les fichiers contenus dans /mon/super/dossier. Si on veut afficher tous les fichiers du dossier actuel, on utilise donc tout simplement find ..

Pas question pour nous toutefois de compter ce qu'il y a dans des fichiers ne contenant pas du code ! Nous allons donc modifier un peu notre commande find pour qu'elle ne nous retourne que les fichiers possédant, par exemple, l'extension .py. Cela nous donne find . -name "*.py".

Maintenant qu'on a notre belle liste de fichiers, on va afficher le contenu de chacun d'entre eux. On utilise la commande cat (pour rappel, cat monfichier affiche le contenu de monfichier). Attention, c'est là que ça se complique un peu :

find . -name "*.py" -exec cat {} \;

En fait, le paramètre -exec permet d’exécuter une ligne de code arbitraire à chaque fois que find trouve un fichier. La ligne exécutée ici est cat {}. Il faut savoir que {} sera remplacé par le nom de chaque fichier trouvé par find. Au passage : ne vous souciez pas de \;, c'est juste une structure nécessaire pour terminer la commande exécutée par findcorrectement.

Pas clair ? En gros, si find . -name "*.py" me retourne

/mon/dossier/fichier1
/mon/dossier/fichier2
/mon/dossier/lol/fichier3

cela signifie que find . -name "*.py" -exec cat {} \; exécutera

cat /mon/dossier/fichier1
cat /mon/dossier/fichier2
cat /mon/dossier/lol/fichier3

Il ne nous reste plus qu'à relier la sortie de cette commande à notre commande wc -l. Pour cela, on utilise l'opérateur pipe, |. Retenez simplement que a | b relie la sortie de la commande a à l'entrée de la commande b.

find . -name "*.py" -exec cat {} \; | wc -l

Fantastique, vous savez maintenant compter le nombre total de lignes dans tous les fichiers .py de votre dossier actuel !

Vous en voulez encore ?!

Pour pousser encore le vice : on peut vouloir compter le nombre total de lignes contenues dans plusieurs extensions de fichiers. Par exemple, la majorité du code de minaw.net est dans des fichiers .py, .html et .js.

On utilise pour cela une boucle for. Je ne vais pas détailler ici, mais le résultat final nous donne

(for ext in py js html; do find . -name "*.$ext" -exec cat {} \;; done) | wc -l

Ce qui nous indique qu'à l'heure actuelle, minaw.net comporte bientôt 6000 lignes de code ;-)


RR 29 juillet 2017 05:23

Futut Professeur de Code ! :p Très bien expliqué ;-)


Ajoutez un commentaire !


S'ABONNER

Pour ne rien rater des nouveautés, abonnez vous à la newsletter.