Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

Hizoka a écrit :

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 wink) :

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 ?!! lol


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...
smile


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 résolu, 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[@]}"
big_smile


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... roll


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 résolu, 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"
le schtroumpf grongon a écrit :

j'aime pas cd.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne