Speichern Sie die Datei mit dem Befehl curl in einem bestimmten Ordner

182

In einem Shell-Skript möchte ich eine Datei von einer URL herunterladen und in einem bestimmten Ordner speichern. Welches CLI-Flag sollte ich verwenden, um Dateien mit dem curlBefehl in einen bestimmten Ordner herunterzuladen , oder wie erhalte ich sonst dieses Ergebnis?

Ziyaddin Sadigov
quelle
Es scheint, dass Bash-Programmierung Programmierung ist ...
rjurney

Antworten:

279

Ich glaube nicht, dass Sie einen Pfad zum Einrollen angeben können, aber Sie können eine CD an den Speicherort senden, herunterladen und zurücksenden.

cd target/path && { curl -O URL ; cd -; }

Oder mit Subshell.

(cd target/path && curl -O URL)

Beide Methoden werden nur heruntergeladen, wenn ein Pfad vorhanden ist. -Obehält den Namen der Remote-Datei bei. Nach dem Download kehrt es zum ursprünglichen Speicherort zurück.

Wenn Sie den Dateinamen explizit festlegen müssen, können Sie eine kleine -oOption verwenden:

curl -o target/path/filename URL
Atle
quelle
2
Ich habe diesen Befehl: curl -LOk basename /packages" github.com/ziyaddin/xampp/archive/master.zip ". Aber es heißt, dass der falsche Dateiname ->basename /packages
Ziyaddin Sadigov
10
Sie können auch eine Unterschale verwenden, wie (cd target/path; curl -O URL)
folgt
9
Was ist der Unterschied zwischen den beiden? Die erste CD befindet sich in einem Verzeichnis und lädt die Datei herunter. Anschließend wird die CD ausgegeben. Der zweite bleibt im aktuellen Verzeichnis und rollt die Datei an einen bestimmten Speicherort. Der zweite scheint einfacher zu sein.
Henry Zhu
9
@HenryZhu Im ersten Fall wird der Dateiname vom Namen der Datei auf dem Server abgeleitet. Im zweiten Schritt benennen Sie den heruntergeladenen Inhalt in einen von Ihnen angegebenen Namen um.
Turtlemonvh
4
Ich möchte wirklich eine Option, um ein Verzeichnis anzugeben, aber den Dateinamen des Servers verwenden. Es scheint, als wäre die Verwendung cdderzeit die beste Option, obwohl sie etwas unelegant erscheint.
StockB
4

curlhat keine Option dazu (ohne auch den Dateinamen anzugeben), wgettut es aber . Das Verzeichnis kann relativ oder absolut sein. Außerdem wird das Verzeichnis automatisch erstellt, wenn es nicht vorhanden ist.

wget -P relative/dir "$url"

wget -P /absolute/dir "$url"
wisbucky
quelle