Forum Linux.debian/ubuntu Commande Linux qui permet de copier un fichier vers différents dossiers

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
29
jan.
2017

Bonjour à tous
Je suis débutant sous linux
J'aimerais copier un ficher et coller dans plusieurs dossiers différents. Exemple je veux copier mon_fichier pour coller dans dossier_1 dossier_2 dossier_3 etc. tous contenus dans dossier_parent. Je ne sais pas si quelqu'un peut m'aider.
merci!

  • # à la main

    Posté par  . Évalué à 2.

    cp mon_fichier dossier_1/
    cp mon_fichier dossier_2/
    cp mon_fichier dossier_3/

    si c'est compliqué de repeter 3x, tu met dans un script, et ca doit d'ailleurs etre le but de l'exercice.

    un script, qui prendrait le nom du fichier, et le dossier parent en parametre,
    qui trouverait les dossiers de destinations, et ferait aurant de copie de de dossier final

  • # xargs + cp

    Posté par  . Évalué à 3.

    J'ignore s'il y a des solutions dans les environnements de bureau (GNOME, KDE, Xfce, …).
    Sur la ligne de commande, cp est un des outils utilisés pour copier. Il copie une ou plusieurs sources vers une seule destination.

    cp src dest
    cp src1 src2 … srcN dest
    man cp # le manuel

    Accomplir une copie vers plusieurs destinations revient à itérer la copie en changeant de destination à chaque nouvelle itération ; on parle aussi de boucler pour signifier « itérer ». Il existe plusieurs façons d'itérer dans l'interpréteur de la ligne de commandes car il y a de multiples langages de programmation qu'il interprète.

    Je te propose un outil qui s'appelle xargs qui construit des arguments à passer aux commandes ultérieures à partir des résultats des précédentes.

    ## Par défaut, afficher
    Bash> printf "%s " "dir1" "dir2" "dir3" | xargs
    #dir1 dir2 dir3
    
    ## Réorganiser les sorties
    Bash> printf "%s " "dir1" "dir2" "dir3" | xargs --max-args=1
    #dir1
    #dir2
    #dir3
    
    ## Solution à la question demandée
    ## Ici, la commande ultérieure est 'cp mon_fichier'
    Bash> printf "%s " "../dossier_1" "../dossier_2" "../dossier_3" | xargs --max-args=1 cp mon_fichier
  • # itération dans le shell

    Posté par  (Mastodon) . Évalué à 7. Dernière modification le 29 janvier 2017 à 20:05.

    ça dépend un peu de ton shell, mais qqchose comme :

    for f in dossier_1 dossier_2 dossier_3; do cp mon_fichier $folder; done

    est censé marcher

    En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

    • [^] # Re: itération dans le shell

      Posté par  (Mastodon) . Évalué à 2.

      pardon, lire $f et pas $folder dans la commande cp

      En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.

  • # tee

    Posté par  (site web personnel) . Évalué à 1.

    Mise en place de la situation :

    mkdir dossier1 dossier2 dossier3
    echo "Salut les amis :)" > monfichier
    ls -l

    Copie multiple :

    tar -c monfichier | tee >(tar -xC dossier1) >(tar -xC dossier2) | tar -xC dossier3

    Vérification :

    ls -l dossier*

    Il resterait à voir ce que cela donne avec de gros fichiers…

    • [^] # Re: tee

      Posté par  (site web personnel) . Évalué à 1.

      Avec un fichier de ± 730 Mo (obtenu à partir de /dev/urandom), j'obtiens sur base d'une moyenne de 4 exécutions en alternance de deux scripts, l'un basé sur tar et tee, l'autre sur 3 cp successifs :

      Pour tar&tee :
      real 8,80s
      user 0.19s
      sys 4.90s

      Pour 3×cp :
      real 9.21s
      user 0.02s
      sys 3.02s

      • [^] # Re: tee

        Posté par  . Évalué à 2.

        Vide le cache disque avant chaque test : sync; sysctl vm.drop_caches=3
        Je pense qu'avec ça tu auras le tar plus rapide si les fichiers sont plus gros que le cache.
        Et avec des fichiers tenant dans le cache, le cp devrait être plus rapide à cause de la localité des écritures.

  • # dcfldd

    Posté par  . Évalué à 1. Dernière modification le 30 janvier 2017 à 11:23.

    Peut-être aussi avec dcfldd :

    dcfldd if=fichSource of=rep1/fichSource of=rep2/fichSource of=rep3/fichSource

  • # Merci

    Posté par  . Évalué à 1.

    Merci à tous. J'ai la solution à mon problème

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.