Cómo copyr usando for loop?

Estoy usando esto for d in ./*/ ; do (cd "$d" && cp -R ../lib . ); done for d in ./*/ ; do (cd "$d" && cp -R ../lib . ); done for d in ./*/ ; do (cd "$d" && cp -R ../lib . ); done en un script de shell para copyr la carpeta lib en todas las subcarpetas dentro de mi directory padre. Pero la carpeta lib también se copy en lib. ¿Cómo evitar eso?

Sin extglob :

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

O simplemente elimínelo después … (¡bien, a less que exista lib/lib antemano!)

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

(De manera algo divertida, GNU cp dice cp: cannot copy a directory, 'lib', into itself, 'lib/lib' , pero lo hace de todos modos).

De una sola mano:

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

O tal vez moverlo para que no coincida:

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

Usando la opción does-not-include del command ls:

 for d in $(ls -I lib -1 */) ; do cp -R lib "$d" ; done