Appliquer la notion
On souhaite améliorer le script suivant. Ce script prends en paramètre un nom de dossier, copie tout les fichiers .png
se trouvant dans le dossier camera
vers le dossier passé en paramètre, puis compte le nombre de fichiers dans le dossier de destination pour l'afficher.
if [ -z $1 ]
then
dossier="photos"
else
dossier=$1
fi
cp camera/*.png $dossier/
count=$(ls $dossier | wc -l)
echo "Il y a $count photos dans le dossier"
On souhaite maintenant que ce script ne copie pas tout les fichiers .png
d'un coup, mais qu'il réalise la copie un par un tout en affichant un message "Copie de CHEMIN_DU_FICHIER" à chaque étape.
Question
Adaptez le script en conséquence.
Solution
On va utiliser une boucle for
pour réaliser l'opération sur chaque fichier .png
se trouvant dans le dossier camera
.
if [ -z $1 ]
then
dossier="photos"
else
dossier=$1
fi
for fichier in $(ls camera/*.png)
do
echo "Copie de $fichier"
cp $fichier $dossier/
done
count=$(ls $dossier | wc -l)
echo "Il y a $count photos dans le dossier"
L'instruction $(ls camera/*.png)
permet de faire utiliser à la boucle for
la liste des fichiers renvoyés par la commande ls
. Chaque fichier retourné sera dans la variable fichier
, qui est utilisé pour la copie ainsi que pour l'affichage du message.