Wget - Speichern einer Datei in einem lokalen Verzeichnis, das nach dem Link benannt ist

Wget - Speichern einer Datei in einem lokalen Verzeichnis, das nach dem Link benannt ist

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.commit dem Namen „Unterverzeichnis“ newsund dann „Datei“ zu speichern xyz.jif.

Wenn die Datei jedoch xyz.jifverschoben wurde www.qwerty.com/old/xyz.jifund 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 -wParametern); 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

redirurlwird auf das Umleitungsziel gesetzt, falls vorhanden. Wenn nicht, wgetwird mit der Original-URL aufgerufen, wenn ja, wgetwird das Umleitungsziel aufgerufen. Der -xParameter bewirkt wgetdie 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.

verwandte Informationen