Ecrire un script qui copie...

Résolu
Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   -  
Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis super débutant en shell et j'ai des problémes avec l'ecrtiture des scripts, j'aimerai que vous me donniez une idée pour que je puisse resoudre ce script:
-Ecrire un script qui copie la totalité des fichiers d'un repertoire nommé dossier 1 dans un deuxième repertoire en renomant les noms des fichiers en .old.
Je vous remercie d'avance, au plaisir de vous lire :)
A voir également:

4 réponses

Franzux Messages postés 9705 Statut Contributeur 1 146
 
Du genre :

mkdir old && for i in *.*; do cp "$i" ./old/"$i.old"; done


;)

Cordialement.
2
jipicy Messages postés 41342 Statut Modérateur 4 898
 
Salut,

cp -r $1 $2
Le répertoire source et le répertoire destination sont donnés en paramètre au script.
$1 étant le 1er paramètre, $2 le second. Donc à partir de la, tous les répertoires contenus dans le répertoire source ($1) sont copiés récursivement dans le répertoire de destination ($2).

cd $2;
On se positionne dans le répertoire de destination

for i in `ls`;
Pour chaque élément résultant de la commande "ls"...
Là ce n'est pas très recommandé d'écrire cette syntaxe, car si un fichier comporte un espace dans son nom, il sera vu comme 2 éléments et non comme un seul !!! Mieux vaut privilégier celle forme :
for i in *
ce qui évitera l'erreur précédente.

do mv $i $i.old;
Remplacer chaque occurrence trouvée par elle même suivie de l'extension ".old". Là aussi pour concaténer 2 chaînes de caractères mieux vaut privilégier la forme :
mv "${i}" "${i}.old"
sans oublier les quotes doubles autour des variables (bonne habitude à prendre).

2
Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
 
Merci pour tes explications jipicy, elles m'ont été trés utile, bonne journée
1
Chabanus Messages postés 982 Date d'inscription   Statut Membre Dernière intervention   70
 
merci pour ta réponse Franzux ;)
Mes camarades ont fait cela, mais j'ai rien pigé :( :
#!/bin/bash
cp -r $1 $2
cd $2;
for i in `ls`; do mv $i $i.old; done ;

SI y'a quelqu'un qui pouvait m'eclaircir se serait sympa, merci d'avance.
-1