Come scaricare immagini da un feed xml usando il terminale?

0

Come posso scaricare immagini png da un feed xml che appare nel modo seguente?

<ListBucketResult xmlns="http://url1.com">
  <Name>imagesToUse</Name>
<Prefix/>
<Marker/>
<IsTruncated>false</IsTruncated>
<Contents>
  <ImageStuff>imagetodownload.png</ImageStuff>
  <Size>17293</Size>
</Contents>

Stavo dando un'occhiata a questa domanda qui sullo stesso argomento, tranne per il fatto che non ho bisogno di rinominarli, basta scaricarli.

Essendo nuovo agli script di shell, non sono abbastanza sicuro di come farlo (anche se posso sicuramente farlo in 2 minuti con l'obiettivo-c).

Ho provato a creare il seguente script ed eseguire bash myscript.sh

#!/bin/bash
URL='https://theurlwiththexml.com'
i=0
for u in $(curl -s "$URL" |
           grep png | 
           sed -E 's/.*<ImageStuff>(.+)<\/ImageStuff>//'); do
    curl -s "$u" -o $i.png
    (( i++ ))
done

Ma non succede nulla. Stampa semplicemente un'altra riga senza errori.

    
posta user85704 23.07.2014 - 10:48
fonte

1 risposta

1

Dopo curl http://theurlwiththexml.com :

sed -n 's,.*<ImageStuff>\(.*\.png\)<.*,,p'|xargs -I, curl http://url1.com/, -o ,

sed -n disabilita la stampa, \( e \) sono un modo portabile per specificare i gruppi e p stampa lo spazio del motivo. xargs -I specifica una stringa di sostituzione e curl -o specifica un file di output.

O utilizzando xmlstarlet , parallel e wget :

xml sel -t -v //ImageStuff|parallel wget http://url1.com/{}

sel è un'abbreviazione per select , -t -v usa il modello di valore e //ImageStuff è un'espressione XPath che corrisponde a tutti i ImageStuff nodi.

    
risposta data 23.07.2014 - 15:12
fonte

Leggi altre domande sui tag