En cherchant un petit script pour compter des lignes de code dans un dossier, je suis tombé sur la problématique de la récursivité pour parcourir les sous dossiers.
N’étant pas un spécialiste du shell, je ne savais pas qu’on pouvait déclarer des fonctions en shell, donc voici comment faire :
#!/bin/bash
fichierstexte=( html phtml php css js yml );
nbextensions=${#fichierstexte[@]}
nblignes=0
nbfichiers=0
if [ -z "$1" ]
then
echo "manque argument du dossier"
exit
fi
recursiveCount() {
for file in "$1"/*; do
if [ -f "$file" ]
then
extension="${file#*.}"
for ((i = 0; i < nbextensions; i++)); do
if [ ${fichierstexte[i]} = $extension ]
then
nb=`wc -l < $file`
nblignes=$((nblignes + nb +1))
nbfichiers=$((nbfichiers + 1))
fi
done
elif [ -d "$file" ]
then
recursiveCount "$file"
fi
done
}
recursiveCount $1
echo "nombre de lignes dans $1"
echo "total lignes : $nblignes"
echo "total fichiers : $nbfichiers"
fichierstexte=( html phtml php css js yml );
nbextensions=${#fichierstexte[@]}
nblignes=0
nbfichiers=0
if [ -z "$1" ]
then
echo "manque argument du dossier"
exit
fi
recursiveCount() {
for file in "$1"/*; do
if [ -f "$file" ]
then
extension="${file#*.}"
for ((i = 0; i < nbextensions; i++)); do
if [ ${fichierstexte[i]} = $extension ]
then
nb=`wc -l < $file`
nblignes=$((nblignes + nb +1))
nbfichiers=$((nbfichiers + 1))
fi
done
elif [ -d "$file" ]
then
recursiveCount "$file"
fi
done
}
recursiveCount $1
echo "nombre de lignes dans $1"
echo "total lignes : $nblignes"
echo "total fichiers : $nbfichiers"
le script produit ce genre de sortie :
julien@julien-desktop:~/Sites$ ./countlines.sh jsproxy/
nombre de lignes dans jsproxy/
total lignes : 8694
total fichiers : 40
nombre de lignes dans jsproxy/
total lignes : 8694
total fichiers : 40
à améliorer pour pouvoir passer plus de paramètres comme des dossiers à exclure par exemple.