Su código de shell tiene dos problemas:
- El
echo
no debería estar allí.
- La variable
$i
está mal escrita como $1
en 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 thefile
y theotherthing
en el directorio llamado thecopy
.
En su caso, busca específicamente un archivo llamado test.ogg
y uno llamado echo
para copiar en el directorio test$1.ogg
.
Lo $1
más probable es que se expanda a una cadena vacía. Es por eso que, cuando elimina el echo
comando, 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.
echo
que no debería estar allí y el$1
que debería estar$i
?