![Wget - Speichern einer Datei in einem lokalen Verzeichnis, das nach dem Link benannt ist](https://rvso.com/image/1452862/Wget%20-%20Speichern%20einer%20Datei%20in%20einem%20lokalen%20Verzeichnis%2C%20das%20nach%20dem%20Link%20benannt%20ist.png)
Ich bin neu in der Verwendung von wget, daher hoffe ich, dass dies keine dumme Frage ist:
Wie kann ich eine Datei in einem lokalen Verzeichnis speichern, das nach dem Link zur Datei benannt wurde?
Es scheint nicht zu funktionieren, wenn beim Download eine Umleitung erfolgte.
Beispiel: Angenommen, ich lade eine Datei von herunter www.abc.com/news/xyz.jif
. Dann kann ich wget veranlassen, eine lokale Kopie in einem Verzeichnis www.abc.com
mit dem Namen „Unterverzeichnis“ news
und dann „Datei“ zu speichern xyz.jif
.
Wenn die Datei jedoch xyz.jif
verschoben wurde www.qwerty.com/old/xyz.jif
und die Suche dorthin umgeleitet wurde, ist die Datei immer noch unter www.abc.com
... usw. gespeichert.
Wie gesagt, ich bin neu hier und hoffe daher, dass ich das Problem richtig erklärt habe.
Hier ist ein einfaches Beispiel aus der Praxis (mit wget):
wget --force-directories www.smugmug.com/photos/1235566-S.jpg
Es wird gespeichert unter: c:\www.smugmug.com/photos/1235566-S.jpg, das istfalsch. Es hätte unter gespeichert werden sollen c:\suz.smugmug.com/photos/1235566-S.jpg
, wohin es weitergeleitet wurde.
Antwort1
Entschuldigung, ich habe den Punkt zunächst nicht verstanden. Also eine komplett neue Antwort (schnell und einfach - und da es sich um Bash-Programmierung handelt, funktioniert es nur unter Linux): Verwenden Sie cURL, um festzustellen, ob eine Umleitung vorliegt (mit -w
Parametern); verwenden Sie je nach Ergebnis wget, um entweder die ursprüngliche URL oder das Umleitungsziel abzurufen:
url=www.smugmug.com/photos/1235566-S.jpg; redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`; if [ -z $redirurl ]; then wget -x $url; else wget -x $redirurl; fi
Oder in mehreren Zeilen:
url=www.smugmug.com/photos/1235566-S.jpg;
redirurl=`curl -w "%{redirect_url}" --output /dev/null --silent ${url}`;
if
[ -z $redirurl ];
then wget -x $url;
else wget -x $redirurl; fi
redirurl
wird auf das Umleitungsziel gesetzt, falls vorhanden. Wenn nicht, wget
wird mit der Original-URL aufgerufen, wenn ja, wget
wird das Umleitungsziel aufgerufen. Der -x
Parameter bewirkt wget
die Erstellung der Unterverzeichnisse.
Natürlich behandelt dies nur eine Umleitungsebene. Um es robuster zu machen, müssten Sie rekursiv prüfen, ob eine Umleitung vorliegt. Es ist also nicht nur eine Frage von Befehlszeilenoptionen, wenn Sie dieses Problem auf zuverlässige Weise lösen möchten.