Comment télécharger un fichier par FTP à partir de la ligne de commande?

115

J'ai besoin de télécharger un seul fichier sur un serveur FTP à partir d'Ubuntu. Cette opération doit être effectuée dans un script (en mode non interactif). Quelle est la bonne syntaxe pour ftp?

J'essaye cela, en vain:

$ ftp -u ftp://user:[email protected] my-local-file.txt
ftp: Invalid URL `ftp://'
yegor256
la source
5
Comment puis-je man page?
Ignacio Vazquez-Abrams
Je ne connais pas grand chose à propos de l’ ftpoutil dans Ubuntu, mais on dirait qu’il s’étouffe ftp://. essayez de prendre ça peut-être?
Nate Koppenhaver
@ IgnacioVazquez-Abrams man ftpà la ligne de commande
c.gutierrez
Similaire: Synchroniser des fichiers via FTP , mais pour plusieurs fichiers.
Kenorb
J'obtiens '-u option inconnue'.
Robert Reiz

Réponses:

182

Voici une approche:

$ ftp -n <<EOF
open ftp.example.com
user user secret
put my-local-file.txt
EOF

Vous pouvez également créer (ou modifier) ​​le fichier ~ / .netrc dans le répertoire personnel de l'utilisateur qui exécutera la commande ftp, attribuez-lui la fonction perms ( chmod 0600 ~/.netrc) appropriée et ajoutez les éléments suivants:

# ~/.netrc
machine ftp.example.com
login user
password secret

Puis omettez les informations de connexion, comme dans:

$ echo put my-local-file.txt | ftp ftp.example.com

Aussi, voici comment vous pourriez faire la même chose en utilisant curl:

$ curl -T my-local-file.txt ftp://ftp.example.com --user user:secret
Marty
la source
12
Wow, je ne savais pas que le curlftp était supporté! C'est super pratique.
Sébastien
62
+1 pour la curlsolution. Pourquoi même s'embêter avec l'autre?
Asaph
3
@ Asaph parce que curl n'est pas installé là où j'ai besoin de le faire, alors l'autre solution s'est révélée pratique. Merci.
bobef
1
+1 pour le curl. Soigné, propre et droit au but! Dans Debian / Ubuntu, "apt-get install curl", si vous ne l'avez pas.
GTodorov
2
la curlsolution est la meilleure et la plus facile
17

Je peux recommander ftp-upload. C'est un petit outil soigné que vous pouvez installer sous Ubuntu sudo apt-get install ftp-upload.

Exemple d'utilisation:

ftp-upload -h {HOST} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
Floris
la source
Pouvez-vous fournir un lien vers l'outil ou sa documentation?
bwDraco
1
Bonjour DragonLord, si vous êtes dans Ubuntu et que vous avez installé ftp-upload (en utilisant la commande que j'ai donnée auparavant), vous pouvez simplement le faire man ftp-upload. J'espère que ça t'as aidé.
Floris
5

Vous devez corriger l'URL indiquée dans votre relevé. Vous avez reçu l'erreur parce que l'URL était incomplète - il manquait le nom de l'objet que vous téléchargez. Une fois que vous avez ajouté le nom de fichier après "exemple.com", comme indiqué ci-dessous, vous verrez que la commande unique fonctionne comme vous le souhaitez.

Essaye ça:

ftp -u ftp://user:[email protected]/my-local-file.txt my-local-file.txt

Paul
la source
9
ftp: option non valide - 'u'
Babken Vardanyan
2
Indeed :( ftp: u: option inconnue
webDEVILopers
ftp: u: option inconnue
Morten
4

Installez ncftp et utilisez l’ outil ncftpput qui s’y accompagne, à peu près de la syntaxe suivante:

ncftpput -u ftpuser -p ftppass ftphostname /path/where/to/upload localfile.name
if [ $? -ne 0 ]; then echo "Upload failed"; fi

Vous pouvez même vérifier si le statut de téléchargement est bon ou mauvais. Le client ftp normal peut également être utilisé avec expect.

OG
la source
3

Tu peux aussi essayer lftp.

Voici un exemple:

lftp -e 'cd folder1/folder2; put /home/path/yourfile.tar; bye' -u user,password ftp.theserver.com

Référez-vous ici pour plus de détails

.

divinedragon
la source
2

Télécharger un fichier vers un emplacement distant via une ligne de commande

#!/bin/bash
#$1 is the file name
#usage:this_script <filename>
HOST='yourhost'
USER="youruser"
PASSWD="pass"
FILE="abc.php"
REMOTEPATH='/html'

ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd $REMOTEPATH
put $FILE 
quit
END_SCRIPT
exit 0
Shal
la source
1

J'utilise BusyBox ftpputpour faire ceci:

# /bin/busybox ftpput

BusyBox v1.20.2 (Debian 1:1.20.0-7) multi-call binary.

Usage: ftpput [OPTIONS] HOST [REMOTE_FILE] LOCAL_FILE

Upload a file to a FTP server

    -v,--verbose            Verbose
    -u,--username USER      Username
    -p,--password PASS      Password
    -P,--port NUM           Port

Note: busybox ftpgetfonctionne bien aussi.

Naskel
la source
0

Vous pouvez également utiliser la commande sftp ou ftp

sftp {user}@{IP}
Password:
put {path To File On Local Computer}

iProgramme
la source
0

J'ai amélioré la réponse de Marty comme ci-dessous (inclure le binaire):

[ftp_example_1.sh]

$ ftp_example_sh.sh fichier_dump

ftp -n <<EOF
open 192.168.0.10
user anonymous aaa
binary
put $1
EOF

[ftp_example_2.sh]

$ ftp_example_2.sh 192.168.0.10 dump_file

ftp -n <<EOF
open $1
user anonymous aaa
binary
put $2
EOF
sailfish009
la source
-1
FtpPut(){
    echo `echo -e "open host\nuser user pass\nbinary\nput $1\nquit"|ftp -nv`
}
FtpPut asd.txt
FtpPut asd.mp4
FtpPut asd.php
...
Yöncü Bilişim Çözümleri
la source