0 votes

Répertoires en boucle Bash

Ma tâche simple consiste à créer dans le répertoire de travail jusqu'à un maximum de répertoires distincts

  1. copier à l'intérieur certains fichiers du répertoire modèle (de sorte que chaque nouveau répertoire est une réplique et que la différence ne se situe qu'à l'intérieur des noms définis à partir de i)
  2. créer un nouveau fichier txt dans chacun des nouveaux répertoires avec du texte :

    home=/projects/clouddyn/md_bench/for_server/MD_bench
    template=$home/template
    
    cd $home
    min=1
    max=3
    
    for i in $(eval echo "{$min..$max}")
    do
        mkdir "sim_$i"
        sim=$(basename "sim_$i")
        pushd $sim
        cp $template/*.* $sim
        prinf "This is $i dir" > ./$sim/file_$i.txt
        popd
    done

Malheureusement, les nouveaux répertoires sont créés mais les fichiers ne sont pas copiés.

Merci pour votre aide !

1voto

nohillside Points 82672

Plusieurs éléments de votre script peuvent entraîner des erreurs :

#!/bin/bash
home=/projects/clouddyn/md_bench/for_server/MD_bench

# home is a bad choice, because $HOME has a special meaning and it's
# confusing to have both $HOME and $home. But it doesn't make the script fail

template=$home/template

cd $home
min=1
max=3

# for i in $(eval echo "{$min..$max}")
# this can be replaced by the easier to read
for i in {$min..$max}
do
    mkdir "sim_$i"

    # sim=$(basename "sim_$i")
    # basename strips the path part, but "sim_$i" doesn't even have a path
    # so basically this just assigned "sim_$i" to $sim and can be replaced by
    sim="sim_$i"
    # Ideally this assignment would be the first statement after 'do' so 
    # it could be used already in 'mkdir'

    # pushd $sim
    # cp $template/*.* $sim
    # Two problems here:
    # - 'pushd' already changes into $sim, so when 'cp' is called there is
    #   no $sim directory to copy into (as you are already in it)
    # - '$template/*.*' only matches files with a dot in the name, which may
    #   or may not be what you want
    # As there is no need to 'cd' into a directory to copy files into it I
    # would just use
    cp $template/* $sim/

    # prinf "This is $i dir" > ./$sim/file_$i.txt
    # You probably meant 'printf' here. Also this line has the same problem
    # as the 'cp' above (you are already in $sim)
    printf "This is $i dir" > $sim/file_$i.txt

    # popd
    # Not needed any longer
done

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X