Como copiar usando loop for? [duplicado]

3

Estou usando isso %código% em um script de shell para copiar a pasta lib em todas as subpastas dentro do meu diretório pai. Mas a pasta lib também é copiada dentro da lib. Como evitar isso?

    
por the_Strider 11.08.2016 / 13:15

3 respostas

3

Sem extglob :

for d in */ ; do
    if [ "$d" != "lib/" ]; then
        cp -R lib "$d"
    fi
done

Ou apenas exclua-o depois ... (bem, a menos que lib/lib exista!)

for d in */; do cp -R lib "$d"; done
rm -r lib/lib

(Curiosamente, o cp do GNU diz cp: cannot copy a directory, 'lib', into itself, 'lib/lib' , mas faz assim mesmo.)

    
por 11.08.2016 / 13:32
2

Um caminho:

shopt -s extglob
for d in ./!(lib)/; do #...

Ou talvez mova-o para que ele não corresponda:

mv lib ../ #better not have a conflicting ../lib directory there
for d in */; do cp -R ../lib "$d"; done
    
por 11.08.2016 / 13:20
0

Usando a opção não incluir do comando ls:

for d in $(ls -I lib -1 */) ; do cp -R lib "$d" ; done
    
por 11.08.2016 / 13:52