Ich lade eine Site mit wget herunter und viele Links sind mit Suchanfragen verknüpft. Wenn ich das mache:
wget -nv -c -r -H -A mp3 -nd http://url.to.old.podcasts.com/
Am Ende habe ich viele Dateien wie diese:
1.mp3?foo=bar
2.mp3?blatz=pow
3.mp3?fizz=buzz
Am Ende möchte ich Folgendes haben:
1.mp3
2.mp3
3.mp3
Dies findet alles unter Ubuntu Linux statt und ich habe wget 1.10.2.
Ich weiß, dass ich das tun kann, nachdem ich alles über ein Skript erhalten habe, um alles umzubenennen. Ich hätte jedoch gerne eine Lösung aus wget heraus, damit ich die korrekten Namen sehen kann, während der Download stattfindet.
Kann mir jemand helfen, das zu entwirren?
wget
Befehlen (wenn nicht weniger) tun .Antworten:
Wenn der Server freundlich ist, kann es sein, dass er beim Herunterladen einen Content-Disposition-Header anbringt, der Ihren Client über den korrekten Dateinamen informiert. Es ist ganz einfach, wget zu sagen, dass er diesen Header nach dem endgültigen Dateinamen anhören soll:
Sie benötigen eine neue Version von wget, um diese Funktion nutzen zu können.
Ich habe keine Ahnung, wie gut es mit einem Server umgeht, der den Dateinamen '/ etc / passwd' beansprucht.
quelle
?v=blah
Typ-Versionierung nicht funktioniert . Ich weiß nicht, ob es eine cloudfront-spezifische Möglichkeit gibt, ein Dokument ohne diese Informationen anzufordern, aber ich habe keine gefunden. In diesem Fall ist möglicherweise eine der anderen Antworten erforderlich. (Wenn jemand eine Möglichkeit kennt, diev=
Saiten zu entfernen oder Cloudfront davon abzuhalten, sie zu bedienen , würde ich gerne davon hören.)Nach der Verarbeitung eines großen Stapels wurde mir klar, dass ich hätte die Abfragezeichenfolgen
wget
ignorieren sollen. Ich wollte es nicht noch einmal machen, also habe ich dieses Skript erstellt, das für mich funktioniert hat:Schreiben Sie das in eine Datei wie
rmqstr
undchmod +x rmqstr
Syntax:./rmqstr <directory (defaults to .)>
Die Abfragezeichenfolgen werden rekursiv aus allen Dateinamen entfernt.
quelle
Ich denke, um
wget
zu speichern, wie ein Dateiname anders als die URL angibt, müssen Sie das-O filename
Argument verwenden. Das macht nur, was Sie wollen, wenn Sie ihm eine einzige URL geben - bei mehreren URLs endet der gesamte heruntergeladene Inhalt infilename
.Aber das ist wirklich die Antwort.
wget
Verwenden Sie mehrere Befehle, anstatt zu versuchen, alles in einem Befehl auszuführen. Jetzt wird Ihr Workflow:wget
Sie den Befehl aus , um die Basis-HTML-Datei (en) mit Ihren Links abzurufen.mp3
,http://foo/bar/baz.mp3?gargle=blaster
inbaz.mp3
wget <URL> -O <filename>
Das löst Ihr Problem, aber jetzt müssen Sie herausfinden, wie Sie die Basisdateien abrufen, um Ihre
mp3
URLs zu finden .Haben Sie eine bestimmte Site- / Basis-URL im Hinterkopf? Die Schritte 1 und 3 lassen sich anhand eines konkreten Beispiels leichter handhaben.
quelle
OKAY. Verwenden Sie wget wie gewohnt. Verwenden Sie das Post-Wget-Skript, das Sie normalerweise verwenden, aber verarbeiten Sie die Ausgabe von Wget so, dass die Augen geschont werden:
Dies wird weiterhin
?foo=bar
angezeigt, während Sie herunterladen, aber der Rest des Namens wird in hellem Cyan angezeigt.quelle
Ich habe einen ähnlichen Ansatz wie @Gregory Wolf, weil sein Code immer Fehlermeldungen wie diese erzeugt:
Daher überprüfe ich zuerst, ob der Dateiname eine Abfragezeichenfolge enthält, bevor ich die Datei verschiebe:
Dies überprüft rekursiv jede Datei und entfernt alle Abfragezeichenfolgen in ihren Dateinamen, falls verfügbar.
quelle
Schauen Sie sich diese beiden Befehle an, die ich zum Klonen einer Site erstellt habe. Nachdem das Klonen abgeschlossen ist, können Sie den zweiten Befehl ausführen.
Der zweite Befehl durchsucht den gesamten Klon, sucht nach " ? " - Dateimusternamen und entfernt die Abfragezeichenfolge aus dem Dateinamen.
(Siehe es in GitHub Gist .)
quelle
Noch einfacher ist dies: /unix/196253/how-do-you-rename-files-spezifisch-in-a-list-that-wget-will-use
Dies schlägt eine Methode vor, die im Wesentlichen die Umbenennungsfunktion von wget für mehrere Dateien verwendet (die geändert werden kann, um das Verzeichnis einzuschließen). Siehe die zweite vorgeschlagene Version.
quelle