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.

1
#!/bin/bash
2
3
if [ -z $1 ]
4
then
5
  dossier="photos"
6
else
7
  dossier=$1
8
fi
9
10
cp camera/*.png $dossier/
11
count=$(ls $dossier | wc -l)
12
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.

1
#!/bin/bash
2
3
if [ -z $1 ]
4
then
5
  dossier="photos"
6
else
7
  dossier=$1
8
fi
9
10
for fichier in $(ls camera/*.png)
11
do
12
  echo "Copie de $fichier"
13
  cp $fichier $dossier/
14
done
15
16
count=$(ls $dossier | wc -l)
17
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.