Laden Sie Dateien herunter und erstellen Sie dieselbe Dateistruktur wie die Quelle

21

Ich habe eine Konfigurationsdatei, die aus einer Liste von URIs besteht, die ich herunterladen möchte. Beispielsweise,

  http://xyz.abc.com/Dir1/Dir3/sds.exe
  http://xyz.abc.com/Dir2/Dir4/jhjs.exe
  http://xyz.abc.com/Dir1/itr.exe

Ich möchte die Konfigurationsdatei lesen und jede URL kopieren, aber gleichzeitig die gleiche Verzeichnisstruktur wie auf dem Host erstellen. Zum Beispiel möchte ich für die erste Zeile in der Konfigurationsdatei die Verzeichnisstruktur Dir1 / Dir3 auf meinem lokalen Computer erstellen (falls nicht vorhanden) und dann sds.exe nach ... / Dir1 / Dir3 / kopieren.

Ich habe festgestellt, dass ich mit 'wget -i' alle URLs in einer Datei herunterladen kann, aber wie kann ich damit die entsprechende Verzeichnisstruktur erstellen

NGambit
quelle

Antworten:

27

Von man wget:

-x, --force-Verzeichnisse:

[...]

Erstellen Sie eine Hierarchie von Verzeichnissen, auch wenn sonst keine erstellt worden wäre. Beispiel: wget -x http://fly.srk.fer.hr/robots.txt speichert die heruntergeladene Datei in fly.srk.fer.hr/robots.txt.

Chris Down
quelle
Danke für die Mannempfehlung. Ich sollte mich daran gewöhnen, mir selbst zu helfen.
NGambit
Chris: Aber wenn ich fly.srk.fer.hr/dir1/robots.txt habe, dann erstellt wget -x das Verzeichnis fly.srk.fer.hr und legt die Datei dir1 / robots.txt darin ab. Was ich brauche ist, dass es sogar die Unterverzeichnisse erstellt. dh speichere robots.txt in fly.srk.fer.hr/dir1/
NGambit
@NGambit Es ist unmöglich, eine einzelne Datei mit dem Namen dir1/robots.txtUnix zu erstellen .
Chris Down
Du hast recht. Die von mir verwendete Konfigurationsdatei hatte '\' anstelle von '/' (da sie von einer anderen Windows-basierten Datei analysiert wurde) in Verzeichnispfaden, was die Dinge durcheinander brachte. Nur das '\' durch '/' ersetzt und "wget ​​-x -i Dateiname" funktioniert wie ein Zauber
NGambit
2
Eine Randnotiz: Manchmal möchten Sie die ersten N Ordner in der URL überspringen und dann --cut-dirs=N
Folgendes
16

Um die gewünschte Struktur zu erhalten, würde ich vorschlagen, -nH und -x zu verwenden.

Dadurch wird der Hostname entfernt und die erwartete Verzeichnisstruktur erstellt.

z.B

wget -x -nH http://xyz.abc.com/Dir1/Dir3/sds.exe

- 'Dir1/Dir3/sds.exe' saved [1234]

Von der Manpage:

-nH
--no-host-directories
   Disable generation of host-prefixed directories.  By default, invoking Wget with -r http://fly.srk.fer.hr/ will create a structure of directories beginning with fly.srk.fer.hr/.  This option disables such behavior.

-x
--force-directories
   ...create a hierarchy of directories, even if one would not have been created otherwise...
Joe
quelle