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
echo
no debería estar allí. - La variable
$i
está mal escrito como$1
en 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.