#1 Le 27/11/2016, à 10:16
- gustavecourbet
[Résolu] Copier un même fichier dans plusieurs répertoires
Bonjour,
Je dois régulièrement copier un même fichier dans plusieurs dossiers. Je ne vois pas trop quelle commande me le permettrait (pas d'option correspondante pour la commande cp il me semble) et pour l'instant je copie le fichier en question dans chaque dossier, "à la main".
(Contexte : la salle de classe. Chaque gamin a son dossier. Je crée un fichier sur lequel chaque enfant va travailler, souvent libreoffice mais peu importe, puis je copie ce fichier dans chaque dossier de gamin. C'est (un peu) fastidieux...)
Dernière modification par gustavecourbet (Le 27/11/2016, à 12:26)
Hors ligne
#2 Le 27/11/2016, à 10:38
- Watael
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
salut,
avec xargs :
#!/bin/bash
liste=(
rep1
rep2
)
printf '%s\n' "${liste[@]}" | xargs cp tonFichier
pas testé !
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 27/11/2016, à 11:13
- Hizoka
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Salut
Liste=("Gamin1" "Gamin2")
Fichier="Coucou.txt"
for Enfant in "${Liste[@]}"
do
cp "${Fichier}" "${Enfant}"
done
Dernière modification par Hizoka (Le 27/11/2016, à 20:30)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#4 Le 27/11/2016, à 11:18
- gustavecourbet
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Wow ! On atteint très vite mon seuil de compétence. Voici ce que j'ai fait en suivant ton conseil : j'ai copié le code dans un fichier ouvert avec un éditeur, que j'ai enregistré sous le nom "copier". Je fais un essai avec un fichier /home/ecole/Dropbox/ELEVES/C_N_M/Nicolas/1.odt que je souhaite copier dans les dossiers d'Armand, Ayoub et Edwin (je n'en mets que 3 pour essayer). Cela donne :
#!/bin/bash
liste=(
/home/ecole/Dropbox/ELEVES/C_N_M/Armand
/home/ecole/Dropbox/ELEVES/C_N_M/Ayoub
/home/ecole/Dropbox/ELEVES/C_N_M/Edwin
)
printf '%s\n' "${liste[@]}" | xargs cp /home/ecole/Dropbox/ELEVES/C_N_M/Nicolas/1.odt
Puis quand je lance cela dans le terminal, j'obtiens :
ecole@ecole-HP-ProBook-650-G1:~$ '/home/ecole/Bureau/copier'
cp: omission du répertoire '/home/ecole/Dropbox/ELEVES/C_N_M/Armand'
cp: omission du répertoire '/home/ecole/Dropbox/ELEVES/C_N_M/Ayoub'
Et en effet, le fichier s'est bien copié dans le dossier Edwin (le dernier de la liste), mais pas dans les deux premiers dossiers... Pourquoi ?
Hors ligne
#5 Le 27/11/2016, à 12:05
- gustavecourbet
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Hizoka, je comprends (un peu) mieux la syntaxe de ta proposition, j'essaie donc cela (toujours avec 3 gamins pour l'essai) :
Liste=("/home/ecole/Dropbox/ELEVES/C_N_M/Armand/" "/home/ecole/Dropbox/ELEVES/C_N_M/Ayoub/" "/home/ecole/Dropbox/ELEVES/C_N_M/Edwin/")
Fichier="/home/ecole/Dropbox/ELEVES/C_N_M/Nicolas/1.odt"
for Enfant in "Liste{@}"
do
cp "${Fichier}" "${Enfant}"
done
Mais ça ne fonctionne pas (je n'ai aucun message d'erreur en retour). Ce qui me gêne c'est cette variable "Enfant" qui n'est définie nulle par, il y a quelque chose qui doit m'échapper...
Hors ligne
#6 Le 27/11/2016, à 12:14
- Compte anonymisé
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
si tu veux mettre dans tous les dossiers des élèves tu peux faire simplement quelque chose comme ça :
for a in /home/ecole/Dropbox/ELEVES/C_N_M/*/
do
cp "/home/ecole/Dropbox/ELEVES/C_N_M/Nicolas/1.odt" "$a"
done
Dernière modification par Compte anonymisé (Le 27/11/2016, à 12:14)
#7 Le 27/11/2016, à 12:19
- gustavecourbet
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Anonyme68, ça fonctionne impec. Merci beaucoup. Je note le topic résolu, mais Hizoka et Watael, je suis tout de même preneur de vos réponses pour comprendre, merci à vous également.
Dernière modification par gustavecourbet (Le 27/11/2016, à 12:22)
Hors ligne
#8 Le 27/11/2016, à 12:47
- Hizoka
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Arf...
for Enfant in "${Liste[@]}"
marchera bien mieux...
J'aurais mieux fait de me relire moi...
Désolé...
for Enfant in "${Liste[@]}"
Il va faire une boucle où Enfant prendra 1 à 1 les valeurs de la liste
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#9 Le 27/11/2016, à 12:56
- gustavecourbet
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
OK, ça fonctionne, merci. L'avantage de cette méthode est qu'elle permet de choisir dans quels dossiers on veut copier le fichier.
Arf...
for Enfant in "${Liste[@]}"
marchera bien mieux...
J'aurais mieux fait de me relire moi...
Désolé...for Enfant in "${Liste[@]}"
Il va faire une boucle où Enfant prendra 1 à 1 les valeurs de la liste
Hors ligne
#10 Le 27/11/2016, à 13:39
- Watael
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
je ne connais pas très bien xargs, donc je me suis fais conseillé cette syntaxe (que j'ai testée ) :
printf '%s\n' "${liste[@]}" | xargs -n 1 -P0 cp tonFichier
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#11 Le 27/11/2016, à 18:19
- Hizoka
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Watael => Il existe donc des commandes que tu ne maîtrises pas alors ?!!
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#12 Le 27/11/2016, à 19:51
- erresse
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Pour te simplifier un peu plus la vie, puisque tous les dossiers d'enfants et d'enseignant sont dans le même répertoire, je te conseille de te placer dans ce répertoire avant de faire la boucle (par exemple celle de Hizoka) :
cd "/home/ecole/Dropbox/ELEVES/C_N_M"
Liste=("Armand" "Ayoub" "Edwin")
Fichier="Nicolas/1.odt"
for Enfant in "Liste{@}"
do
cp "${Fichier}" "${Enfant}/"
done
De cette manière, tu n'auras pas répéter le chemin du dossier de chaque enfant dans la liste...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#13 Le 27/11/2016, à 20:30
- Hizoka
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
erresse => for Enfant in "${Liste[@]}"
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#14 Le 28/11/2016, à 15:04
- erresse
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
Comme quoi, le copier / coller...
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#15 Le 28/11/2016, à 15:26
- Watael
Re : [Résolu] Copier un même fichier dans plusieurs répertoires
ou alors, en bash :
srcDir='/home/ecole/Dropbox/ELEVES/C_N_M'
Liste=( "$srcDir"/{Armand,Ayoub,Edwin} )
Fichier="$srcDir/Nicolas/1.odt"
j'aime pas cd.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne