Intento duplicar un archivo de video x veces desde la línea de comando usando un bucle for, lo he intentado así, pero no funciona:
for i in {1..100}; do cp test.ogg echo "test$1.ogg"; done
Respuesta aceptada:
Su código de shell tiene dos problemas:
- El
echono debería estar allí. - La variable
$iestá mal escrito como$1en el nombre del archivo de destino.
Para hacer una copia de un archivo en el mismo directorio que el propio archivo, use
cp thefile thecopy
Si inserta algo más allí, por ejemplo,
cp thefile theotherthing thecopy
entonces se supone que le gustaría copiar thefile y theotherthing en el directorio llamado thecopy .
En tu caso, busca específicamente un archivo llamado test.ogg y uno llamado echo para copiar al directorio test$1.ogg .
El $1 lo más probable es que se expanda a una cadena vacía. Por eso, cuando eliminas el echo del comando, obtienes "test.ogg y test.ogg son los mismos archivos"; el comando que se ejecuta es esencialmente
cp test.ogg test.ogg
Probablemente se trate de un error de escritura.
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:Lo más probable es que esto funcione 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.