Ecrire un script qui copie...

Résolu/Fermé
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 - 4 janv. 2008 à 01:10
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 - 4 janv. 2008 à 13:59
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 8907 Date d'inscription mercredi 5 décembre 2007 Statut Contributeur Dernière intervention 27 octobre 2015 1 145
4 janv. 2008 à 01:53
Du genre :

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


;)

Cordialement.
2
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 894
4 janv. 2008 à 13:53
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 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 70
4 janv. 2008 à 13:59
Merci pour tes explications jipicy, elles m'ont été trés utile, bonne journée
1
Chabanus Messages postés 978 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 11 novembre 2011 70
4 janv. 2008 à 13:29
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