Su código de shell tiene dos problemas:
- El
echono debería estar allí.
- La variable
$iestá mal escrita como $1en el nombre del archivo de destino.
Para hacer una copia de un archivo en el mismo directorio que el archivo en sí, use
cp thefile thecopy
Si inserta algo más allí, por ejemplo
cp thefile theotherthing thecopy
entonces se supone que desea copiar thefiley theotherthingen el directorio llamado thecopy.
En su caso, busca específicamente un archivo llamado test.oggy uno llamado echopara copiar en el directorio test$1.ogg.
Lo $1más probable es que se expanda a una cadena vacía. Es por eso que, cuando elimina el echocomando, obtiene "test.ogg y test.ogg son los mismos archivos"; el comando que se ejecuta es esencialmente
cp test.ogg test.ogg
Esto es probablemente un error.
Al final, quieres algo como esto:
for i in {1..100}; do cp test.ogg "test$i.ogg"; done
O como alternativa
i=0
while (( i++ < 100 )); do
cp test.ogg "test$i.ogg"
done
O, usando tee:
tee test{1..100}.ogg <test.ogg >/dev/null
Nota: Esto probablemente funcionaría para 100 copias, pero para miles de copias puede generar un error de "lista de argumentos demasiado larga". En ese caso, vuelva a usar un bucle.
echoque no debería estar allí y el$1que debería estar$i?