He creado el siguiente script en Bash para automatizar la subida de archivos al servidor Lolabits:
1 #!/bin/bash
2 # USO SIN PROXY:
3 # $ curl-loop
4 # USO CON PROXY:
5 # $ curl-loop -x [URL_proxy]
6 mkdir subido
7 while true
8 do
9 for FILE in *.png
10 do
11 curl -F file=@$FILE https://api.lolabits.se/upload -w "\n" $@ | tee -a log.log
12 FILE2=$(basename $FILE .png)
13 FILTER=$(grep $FILE2 log.log)
14 if [ "$FILTER" ] ; then
15 mv $FILE subido
16 fi
17 done
18 done
El script hace lo siguiente:
- Detecta los archivos con extensión *.png en el directorio presente y los envía secuencialmente a
curl
para que los suba al servidor - El script puede ejecutarse con o sin dirección proxy
- Una vez terminada la subida, el resultado se guarda en el archivo de texto "log.log"
- A continuación lee el archivo "log.log" para comprobar si el PNG usado por
curl
efectivamente ha sido subido al servidor - Si el archivo aparece en "log.log", este es movido al subdirectorio "subido"
- Como los proxies usados son gratuitos, suelen fallar mucho y
curl
suele saltarse muchos archivos y los deja sin subir - Por si se ha quedado algún PNG sin subir, se utiliza un bucle infinito para que el proceso se repita hasta subir todo
El script funciona bien. Pero lo que intento realizar es conseguir una subida en paralelo también sin errores. Si cambio la línea 11 por esto:
11 echo $FILE | xargs -I1 -P4 -i curl -F file=@{} https://api.lolabits.se/upload -w "\n" $@ | tee -a log.log
Consigo una subida en paralelo de 4 archivos simultáneos. El resultado se guarda en "log.log" pero no me mueve los archivos ya descargados al subdirectorio "subido".
Otro problema, desde luego, es que aunque se hayan subido todos los PNG el bucle se repite infinito y hay que detenerlo manualmente.