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://'
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 les permanences appropriées (chmod 0600 ~/.netrc
) 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
Je peux recommander ftp-upload
. C'est un petit outil soigné que vous pouvez installer sous ubuntu via Sudo apt-get install ftp-upload
.
Exemple d'utilisation:
ftp-upload -h {Host} -u {USERNAME} --password {PASSWORD} -d {SERVER_DIRECTORY} {FILE_TO_UPLOAD}
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
Installez ncftp et utilisez l’outil ncftpput qui s’y accompagne, à peu près comme cette syntaxe:
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.
Vous pouvez également 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
.
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
J'utilise la variable ftpput
de BusyBox pour ce faire:
# /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
Remarque: busybox ftpget
fonctionne bien aussi.
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
Vous pouvez également utiliser la commande sftp ou ftp
sftp {user}@{IP}
Password:
put {path To File On Local Computer}