Gibt es eine Möglichkeit, curl zu verwenden, um nicht sequentielle Bilder mit einem Platzhalter herunterzuladen? Ich möchte alle Panoramen, die ich auf mein Konto bei 360 Panorama hochlade, in einen lokalen Ordner herunterladen, damit ich dies nicht jedes Mal manuell tun muss.
Die Bilddateien folgen dem Muster von: http://occipital.com/images/viewer/XYZ_flat.jpg , wobei XYZ zufällig ist. Aus dieser URL geht auch hervor, dass ich bei der Site angemeldet oder als angemeldet angezeigt werden muss.
Sie können diesen bash
Code für die eigentliche URL verwenden, die Sie in Ihrem Kommentar angegeben haben .
for i in $(for j in {1..8}; do
curl http://occipital.com/user/01ca-255/george-coghill/$j/;
done \
| sed -n 's,.*/viewer/\(......_flat\)_small\.jpg.*,http://occipital.com/images/viewer/\1.jpg,p'
); do
curl -L -o "${i##*/}" "$i";
done
Fühlen Sie sich frei, diesen Befehl als eine Zeile zu schreiben; Alle Zeilenumbrüche wurden nur zur besseren Lesbarkeit hinzugefügt. Sie können sie nach Belieben kopieren oder entfernen.
Was dieser Code tut:
Wenn Sie nur Dateien herunterladen möchten, die nicht existieren, und die Anzahl der Galerieseiten im Voraus nicht kennen, können Sie den Code so anpassen:
for i in $(
j=1;
while curl --max-redirs 0 -L -f \
http://occipital.com/user/01ca-255/george-coghill/$((j++))/; do
:;
done \
| sed -n 's,.*/viewer/\(......_flat\)_small\.jpg.*,http://occipital.com/images/viewer/\1.jpg,p'
); do
[[ -f "${i##*/}" ]] || curl -L -o "${i##*/}" "$i";
done
Der erste Code erhöht nun die Seitenzahl, bis eine Weiterleitung oder ein Fehler auftritt. Der Server leitet Sie zur letzten vorhandenen Seite weiter, wenn Sie versuchen, eine Seite nach den vorhandenen zu besuchen. Das [[ -f … ]] ||
Teil wird curl
nur ausgeführt, wenn die entsprechende Datei noch nicht existiert.
"${i##*/}"
ist der Name der Datei auf Ihrem lokalen Rechner; Sie können dem einen Verzeichnisnamen voranstellen, zB "some/dir/${i##*/}"
. Oder Sie gehen einfach cd
zuerst in das gewünschte Verzeichnis.Sie möchten also Bilder von http://occipital.com/images/viewer/ *_flat.jpg herunterladen?
Das ist nicht möglich. Sie können den Viewer nicht als Ordner behandeln. Das Web ist ein Dienst, der Ihnen Dinge zur Verfügung stellt, wenn Sie danach fragen. Es enthält keine Liste aller Dateien. Wenn Sie nicht jede Datei von AAA bis ZZZ ausprobieren, ist dies ohne Liste nicht möglich.
Während Sie keinen echten Platzhalter verwenden können, können Sie Teile in geschweiften Klammern angeben, dh. curl mysite.{alpha,beta,gamma}.com oder Zahlenbereiche mysite.com/files[0001-0100].txt
Weitere Informationen finden Sie auf der Curl-Manpage
http://curl.haxx.se/docs/manpage.html
Für Ihre zufälligen Dateien könnten Sie also mages/viewer/[000-999]_flat.jpg verwenden. Am Ende würden viele Dateien nicht gefunden, aber es sollten alle Dateien vorhanden sein.
Verwenden Sie, wie ClarkGoble sagte, so etwas wie diese "Brute-Force" -Lösung:
curl http://occipital.com/images/viewer/[1-999:1]_flat.jpg -f -o -image_#1_flat.jpg
Die Option „-f“ verhindert, dass curl Ausgabedateien schreibt, wenn ein 404-Fehler auftritt. Sie erhalten also nur eine Ausgabe für die auf dem Server gefundenen Dateien.
-o steht für "Ausgabe"
#1 entspricht dem Ersetzungsmuster, dh in diesem Fall den Zahlen von 1 bis 999 mit einer Schrittweite von 1.
Georg C
Arjan
kein Hang
curl
.Georg C
Georg C
Arjan
Georg C
lhf