Exercice : 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 ]
thendossier="photos"
elsedossier=$1
ficp 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 ]
thendossier="photos"
elsedossier=$1
fifor fichier in $(ls camera/*.png)
doecho "Copie de $fichier"
cp $fichier $dossier/
donecount=$(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.