У вашего шелл-кода есть две проблемы:
- Там
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
?