2009-04-09 6 views
4

Je dois être en mesure de transmettre l'URL du téléchargement du fichier, plus un chemin pour le fichier à enregistrer.Comment faire pour enregistrer CURL dans un répertoire différent?

Je pense que cela a quelque chose à voir avec -O et -o sur CURL, mais je n'arrive pas à le comprendre.

Par exemple, ce que je me sers dans mon script bash maintenant:

#!/bin/sh 

getsrc(){ 
    curl -O $1 
} 

getsrc http://www.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gz 

Comment puis-je changer la déclaration boucle que je peux faire

getsrc http://www.apache.org/dist/ant/binaries/apache-ant-1.7.1-bin.tar.gz /usr/local 

et ont enregistrer la fichier vers/usr/local?

Répondre

6

Hum ... ce que vous voulez sans doute faire est

getsrc(){ 
    (cd $2 > /dev/null ; curl -O $1 ;) 
} 

-O (capitale O) dit stocker dans un local nommé comme le fichier distant, mais d'ignorer la composante de chemin d'accès distant . Pour pouvoir stocker dans un répertoire spécifique, le plus simple est de le cd ... et je le fais dans un sous-shell, donc le changement de dir ne se propage pas

+0

Hey cela a fonctionné parfaitement! Merci de votre réponse si rapide. – Geuis

6

S'il s'agit d'un script, vous devez vous assurer que vous êtes prêt à toute éventualité:

getsrc() { 
    (cd "$2" && curl -O "$1") 
} 

Cela signifie citant vos paramètres, dans le cas où ils contiennent des métacaractères tels que des points d'interrogation, des étoiles, des espaces, des onglets, des sauts de ligne, etc.

Cela signifie également utiliser l'opérateur && entre cd et curl commandes dans le cas où le répertoire cible n'existe pas

Cette fonction prend deux arguments (si vous ne l'utilisez pas, curl toujours télécharger sans erreur, mais placer le fichier dans le mauvais endroit!):

  • L'URL des données à télécharger.
  • Le chemin local où les données doivent être stockées (en utilisant un nom de fichier basé hors de l'URL)

Pour spécifier un nom de fichier local plutôt qu'un chemin, utilisez plus simpliste:

getsrc() { 
    curl "$1" > "$2" 
} 
Questions connexes