Appliquer la notion

On souhaite améliorer le script suivant. Ce script prends en paramètre un nom de dossier, réalise la copie un par un des fichiers du dossier tout en affichant un message "Copie de CHEMIN_DU_FICHIER" à chaque étape.

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"

On souhaite maintenant que ce script utilise une fonction copie_fichier qui s'occupe de faire le traitement de la copie du fichier pour chaque fichier. Cette fonction doit fonctionner peut importe le fichier source et le dossier destination.

Question

Adaptez le script en conséquence.

Solution

On va définir une fonction copie_fichier qui prend en paramètre le fichier source etle dossier destination. Cette fonction va afficher le message puis réaliser le copie.

1
#!/bin/bash
2
3
function copie_fichier {
4
    if [ -z $1 ] || [ -z $2 ]
5
    then
6
        echo "Des paramètres sont vides"
7
    fi
8
    echo "Copie de $1"
9
    cp $1 $2/
10
}
11
12
if [ -z $1 ]
13
then
14
  dossier="photos"
15
else
16
  dossier=$1
17
fi
18
19
for fichier in $(ls camera/*.png)
20
do
21
  copie_fichier $fichier $dossier
22
done
23
24
count=$(ls $dossier | wc -l)
25
echo "Il y a $count photos dans le dossier"

Nous veillons bien à ce que l'utilisateur ait correctement passé les paramètres à la fonction.