Enregistrer le fichier dans un dossier spécifique avec la commande curl

182

Dans un script shell, je souhaite télécharger un fichier à partir d'une URL et l'enregistrer dans un dossier spécifique. Quel est l'indicateur CLI spécifique que je dois utiliser pour télécharger des fichiers dans un dossier spécifique avec la curlcommande, ou comment puis-je obtenir ce résultat?

Ziyaddin Sadigov
la source
Il semblerait que la programmation bash soit la programmation ...
rjurney

Réponses:

282

Je ne pense pas que vous puissiez donner un chemin à curl, mais vous pouvez CD à l'emplacement, télécharger et CD de retour.

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

Ou en utilisant un sous-shell.

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

Les deux méthodes ne seront téléchargées que si le chemin existe. -Oconserve le nom du fichier distant. Après le téléchargement, il reviendra à son emplacement d'origine.

Si vous devez définir explicitement le nom de fichier, vous pouvez utiliser une petite -ooption:

curl -o target/path/filename URL
Atle
la source
2
J'ai cette commande: curl -LOk basename /packages" github.com/ziyaddin/xampp/archive/master.zip ". Mais il dit que le mauvais nom de fichier ->basename /packages
Ziyaddin Sadigov
10
Vous pouvez également utiliser un sous-shell, comme ceci:(cd target/path; curl -O URL)
Ehtesh Choudhury
9
Quelle est la différence entre les deux? Le premier cd est dans un répertoire et télécharge le fichier, puis sort. Le second reste dans le répertoire courant et boucle le fichier vers un emplacement spécifique. Le deuxième semble plus simple.
Henry Zhu
9
@HenryZhu Dans le premier, le nom de fichier est dérivé du nom du fichier sur le serveur. Dans la seconde, vous renommez le contenu que vous avez téléchargé en un nom que vous fournissez.
turtlemonvh
4
J'aimerais vraiment avoir une option pour spécifier un répertoire, mais utilisez le nom de fichier du serveur. Il semble que l'utilisation cdsoit la meilleure option actuellement, bien que cela semble légèrement inélégant.
StockB
4

curln'a pas d'option pour cela (sans spécifier également le nom de fichier), mais en a wget. Le répertoire peut être relatif ou absolu. De plus, le répertoire sera automatiquement créé s'il n'existe pas.

wget -P relative/dir "$url"

wget -P /absolute/dir "$url"
wisbucky
la source