У вашего шелл-кода есть две проблемы:
- Там
echoне должно быть.
- Переменная
$iвводится с ошибкой, как $1в имени файла назначения.
Чтобы сделать копию файла в том же каталоге, что и сам файл, используйте
cp thefile thecopy
Если вы вставите что-нибудь еще туда, например
cp thefile theotherthing thecopy
тогда предполагается, что вы хотите скопировать thefileи theotherthingв каталог с именем thecopy.
В вашем случае он специально ищет файл с именем test.oggи именем, который echoнужно скопировать в каталог test$1.ogg.
$1, Скорее всего , расширится к пустой строке. Вот почему, когда вы удаляете команду echoиз команды, вы получаете «test.ogg и test.ogg - это одни и те же файлы»; выполняемая команда по существу
cp test.ogg test.ogg
Это, вероятно, опечатка.
В конце концов, вы хотите что-то вроде этого:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
Или, как альтернатива
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
Или, используя tee:
tee test{1..100}.ogg <test.ogg >/dev/null
Примечание. Скорее всего, это будет работать для 100 копий, но для тысяч копий может привести к ошибке «список аргументов слишком длинный». В этом случае вернитесь к использованию цикла.
echoчего не должно быть, и в том,$1что должно быть$i?