хех, это один из первых подземных грюков для человека, который привык к dos и command.com;)
Если обратить внимание на man cp/rm/mv и др., там в параметрах комманды написано "файл", "каталог", "путь", но никак не "маска" или "шаблон". Дело в том, что в никсах программы часто совсем не знают что такое "маски" и не расчитаны на их использование, а парзит шаблоны shell и подставляет результат в команду. В твоем случае, выполнится команда: cp /file.tar.gz /opt/testcp/1/in /opt/testcp/2/in /opt/testcp/3/in /opt/testcp/4/in, если поглядеть на ман - должно быть понятно что делает такая конструкция (хотя лично мну немного непонятно почему 3 каталога "пропускались" ^_^)
По-первой частенько напарываешься на такой "глюк": нужно поглядеть какие есть файлы/каталоги которые начинаются на "u", вродь логично делаешь ls u*, ан нет, ls выводит не только файлы и каталоги, но и содержимое всех каталогов имя которых начинается с "u". Варианты обхода этого - можно использовать обычное echo, он просто выдает на stdout свои параметры, если сделать echo u*, баш на самом деле выполнит команду echo <тут_список_файлов>. Можно так же делать ls -d u*, это говорит ls'у не выводить содержимое каталогов заданных в коммандной строке.
Иногда из-за такого поведения можно хорошенько наколоться, например, если хочешь сделать архив с именем "???.tar.gz" и, вродь как, логично делаешь tar czf ???.tar.gz * и в текущем каталоге есть файлы "aaa.tar.gz" и "bbb.tar.gz", тогда, на самом деле, шелл выполнит команду tar czf aaa.tar.gz bbb.tar.gz *, что, канеха, немного немного неправильно.
Если вернуться к первоначальному вопросу, (почти) правильное решение это - for i in /opt/testcp/*/in; do cp /file.tar.gz $i; done.
"Почти" правильное решение это из-за 3-х нюансов.
1. Если шелл не может найти файлы по маске, тогда он выполняет заданную команду без "замены маски". Т.е. если файлов/каталогов совпадающих по маске с /opt/testcp/*/in не будет совсем, тогда вышеприведенный цикл сработает только один раз в виде cp /file.tar.gz /opt/testcp/*/in, а раз каталога "/opt/testcp/*/in" не существует - вывалится ошибка.
2. На самом деле маски еще более-менее понятное место в шелле, намного хуже все с параметрами команд/функций баша. На этом и основан 2-ой нюанс. Если, например, существует каталог "/opt/testcp/bla bla/in" (внимание на пробел!), тогда команда в цикле будет cp /file.tar.gz /opt/testcp/bla bla/, т.е. команде cp передается не 2 аргумента, а 3. В результате канеха опять будет ошибка, потому как файла "/opt/testcp/bla" нету, и каталога "bla/" тоже нету. В данном случае дело все просто решается если команду делать в виде do cp /file.tar.gz "$i";. Почему я не написал так в самом начале? Да потому что в большинстве скриптов люди плюют на пробелы, надо ж потом что нить исправлять, без багов писать скушна;) Да что там... банально мего-рулезно-полезный "find" долгое время глючил с пробелами и до сих пор глючит по дефолту...
3. Ну совсем нюанс;) Если окажется что существует _файл_ /opt/testcp/5/in - тогда есно будет глюк.
Вобщем, если все учесть, тогда конечный вариант будет - for i in /opt/testcp/*/in; do [ -d "$i" ] && cp /file.tar.gz "$i" || true; done
Я обещал Дигу покритиковать его решение... В принципе - оно вродь как и работает, но слишком много "телодвижений". Сначала запускается "ls", потом проходится по списку выданному, выбирает из них каталоги, потом копирует. Серъезный баг в том, что не проверяется есть ли в каталоге, каталог "in", т.е. если существует каталог /opt/testcp/5/ и он пустой, тогда все равно скрипт будет пытаться сделать "cp /file.tar.gz /opt/testcp/5/in". Канеха, будут глюки с пробелами... но об этом, как я грил выше, мало кто думает 
PS: Я не писатель, поэтому написал, может где нить непонятно, но как умею. %)