Problème cp d'un directory avec des fichiers
r4ven
Messages postés
2
Statut
Membre
-
adrien1975 Messages postés 63 Statut Membre -
adrien1975 Messages postés 63 Statut Membre -
Bonjour et bien voilà je suis étudiant en premiere en bac info et j'ai quelque exercices à faire sous linux ( centOS 6.5 ) je travail sous bash je vous explique ce qui ne va pas
l'exercice :
copier un repertoire Photos ( chmod 777 sur le dossier ) contenant : index.html photo1.jpg photo2.jpg photo3.jpg ( ce sont des fichiers nommé comme si c'était des photos ) et je dois les copier avec un script appellé ex5.sh qui va tout seul copié le dossier Photos en Photo_save et tout ce que contient mon dossier Photos sera a l'interieure copié dans le dossier de destination avec _save a la fin ( index.html_save...) il faudra aussi appeller le dossier de départ SOURCE_DIR et le dossier de reception DEST_DIR
cela ce présente comme suit à ca réussite:
alors je vous copie mon code ( celui du script nommé ex5.sh )
Alors le probleme que j'ai c'est que il fait bien un repertoire Photos_save mais à l'intérieur il ne met pas index.html_save il copie tout tel quel mais sans les _save pour les fichier contenu dans le dossier
la peut etre que 1 ou 2 petite choses ne vont pas non plus mais j ai essaye 300.000 trucs alors j'ai plus les idée claires lol
Merci d'avance
R4ven
l'exercice :
copier un repertoire Photos ( chmod 777 sur le dossier ) contenant : index.html photo1.jpg photo2.jpg photo3.jpg ( ce sont des fichiers nommé comme si c'était des photos ) et je dois les copier avec un script appellé ex5.sh qui va tout seul copié le dossier Photos en Photo_save et tout ce que contient mon dossier Photos sera a l'interieure copié dans le dossier de destination avec _save a la fin ( index.html_save...) il faudra aussi appeller le dossier de départ SOURCE_DIR et le dossier de reception DEST_DIR
cela ce présente comme suit à ca réussite:
./ex5.sh Photo
création d'un répertoire Photos_save
copie de Photos.index.html dans Photos_save/index.html_save
copie de Photos.photo1.jpg dans Photos_save/photo1.jpg_save
copie de Photos.photo2.jpg dans Photos_save/photo2.jpg_save
copie de Photos.photo3.jpg dans Photos_save/photo3.jpg_save
alors je vous copie mon code ( celui du script nommé ex5.sh )
#!/bin/bash
SOURCE_DIR=$1
DEST_DIR=$1_save
echo " Création du répertoire $DEST_DIR "
mkdir $DEST_DIR
for i in $(ls $SOURCE_DIR/*.*)
do
cp $i $1_save/$i_save
echo " copie de $SOURCE_DIR/$i dans $DEST_DIR/$i_save "
done
Alors le probleme que j'ai c'est que il fait bien un repertoire Photos_save mais à l'intérieur il ne met pas index.html_save il copie tout tel quel mais sans les _save pour les fichier contenu dans le dossier
la peut etre que 1 ou 2 petite choses ne vont pas non plus mais j ai essaye 300.000 trucs alors j'ai plus les idée claires lol
Merci d'avance
R4ven
3 réponses
-
Yop, alors grand merci de m'avoir répondu :)
J'ai essayé " for i in ${SOURCE_DIR}/* " mais il me dit "Mauvaise substitution"
puis pour le "${i}" "${DEST_DIR}/${i#*/}_save" j'ai une question ( et j'ai essayer mais à mon avis je ne comprends pas bien comment l'insérer dans mon code ) et pq mettre des {} au lieu de () ??
Merci d'avance encore une fois :)-
$ tree
.
|-- foo.sh
'-- Photos
|-- index.html
|-- photo1.jpg
|-- photo2.jpg
|-- photo3.jpg
'-- photo4.jpg
1 directory, 6 files
$ cat foo.sh
#!/bin/bash
if test -z "${1}"
then
echo "Paramètre absent. Fin du programme"
exit
fi
SOURCE_DIR="${1}"
DEST_DIR="${1}_save"
echo "Création du répertoire $DEST_DIR "
mkdir -p "${DEST_DIR}"
for i in ${SOURCE_DIR}/*
do
cp "${i}" "${DEST_DIR}/${i#*/}_save" && \
echo " copie de ${i} dans ${DEST_DIR}/${i#*/}_save "
done
$ ./foo.sh Photos
Création du répertoire Photos_save
copie de Photos/index.html dans Photos_save/index.html_save
copie de Photos/photo1.jpg dans Photos_save/photo1.jpg_save
copie de Photos/photo2.jpg dans Photos_save/photo2.jpg_save
copie de Photos/photo3.jpg dans Photos_save/photo3.jpg_save
copie de Photos/photo4.jpg dans Photos_save/photo4.jpg_save
$ tree
.
|-- foo.sh
|-- Photos
| |-- index.html
| |-- photo1.jpg
| |-- photo2.jpg
| |-- photo3.jpg
| '-- photo4.jpg
'-- Photos_save
|-- index.html_save
|-- photo1.jpg_save
|-- photo2.jpg_save
|-- photo3.jpg_save
'-- photo4.jpg_save
2 directories, 11 files
-
-
Je dit ptet nimporte quoi mais il faudrait pas remplacer $i_save par "$i"_save et pareil avec $1 pour la command cp ?
-
'lut, ça marche pas parce que
ls $SOURCE_DIR/*.*
te donne le nom des fichiers avec le nom du dossier$SOURCE_DIR
devant.
Du coup faut faire en sorte que LS produise une liste de fichiers sans le nom:for i in $(cd $SOURCE_DIR;ls *.*)
Mais du coup CP ne saura plus copier... à cause de la source, il faut donc lui re-préciser le dossier à chaque fois:cp "$SOURCE_DIR/$i" "$DEST_DIR/${i}_save"
Constate que j'ai mis la forme longue d'expression des variables dans le 2e paramètre pour éviter toute ambigüité avec le "_save" derrière.
Pour le coup du CD dans le $(), je sais pas si c'est une bonne pratique ou pas, si toi, lecteur de ce post, est unbash
iste, libre à toi de me gueuler dessus si ce n'est pas le cas.
from human import idiocy
del idiocy-
Salut,
Pour le coup du CD dans le $(), je sais pas si c'est une bonne pratique ou pas, si toi, lecteur de ce post, est un bashiste, libre à toi de me gueuler dessus si ce n'est pas le cas.
Ce n'est pas tellement lecd rep
qui est gênant, mais plutôt lels *.*
qui est à proscrire, ne serait-ce qu'en cas d'espace dans un nom ;-(
Mieux vaut privilégier unfor i in ${SOURCE_DIR}/*beaucoup plus opportun.
Quant au problème du nom du répertoire, il suffit de jouer avec le remplacement des paramètrescp "${i}" "${DEST_DIR}/${i#*/}_save"qui produira l'effet escompté ;-))
$ ./foo.sh photos
Création du répertoire photos_save
copie de photos/index.html dans photos_save/index.html_save
copie de photos/photo1.jpg dans photos_save/photo1.jpg_save
copie de photos/photo2.jpg dans photos_save/photo2.jpg_save
copie de photos/photo3.jpg dans photos_save/photo3.jpg_save
copie de photos/photo4.jpg dans photos_save/photo4.jpg_save
-