lftp est un client ftp en ligne de commande bien pratique. Il a des fonctionnalités avancées et peut être facilement intégré dans des scripts bash. Pour ma part je préfère utiliser scp lorsque j’ai des fichiers à rapatrier de mes serveurs, mais parfois on a pas le choix et on doit passer par ftp.
Installation
Selon votre système d’exploitation :
$ sudo dnf install lftp # Fedora 18+ $ sudo yum install lftp # Centos $ sudo aptitude install lftp # Debian, Ubuntu
Mode intéractif
Connexion
Vous pouvez commencer par lancer lftp, simplement de la manière suivante
$ lftp
Vous rentrez dans un mode intéractif ou le programme attends que vous lui passiez des commandes.
lftp :~> open -umy-user my-server-host
Vous pouvez aussi vous connecter directement via au lancement de la commande, il y a deux solutions
lftp login:password@host
lftp -u login,password host
Maintenant que vous êtes connecté en mode interactif, vous devez avoir une ligne toute seul qui attends une commande et qui ressemble à ça
lftp my-user@host:/>
Les commandes
Testons donc quelques commandes :
# Pour avoir la liste de toute les commandes disponibles lftp my-user@host:/> help !<commande-shell> (commandes) alias [<nom> [<valeur>]] attach [PID] bookmark [SOUS-COMMANDE] cache [SOUS-COMMANDE] cat [-b] <fichiers> cd <rép-dis> chmod [OPTS] mode fichier... close [-a] [re]cls [opts] [chemin/][motif] debug [OPTS] [<level>|off] du [options] <répertoires> exit [<code>|bg] get [OPTS] <fichier-distant> -o <fichier-local>] glob [OPTS] <cmd> <args> help [<cmd>] historique : -w fichier|-r fichier|-c|-l [num] jobs [-v] [<job_no...>] kill all|<num> lcd <répertoire-local> lftp [OPTS] <site> ln [-s] <file1> <file2> ls [<args>] mget [OPTS] <fichiers> mirror [OPTS] [distant [local]] mkdir [OPTS] <dirs> module nom [args] more <fichiers> mput [OPTS] <fichiers> mrm <fichiers> mv <fichier1> <fichier2> [re]nlist [<args>] open [OPTS] <site> pget [OPTS] <fichier-distant> [-o <fichier-local>] put [OPTS] <fichier-local> [-o <fichier-distant>] pwd [-p] queue [OPTS] [<cmd>] quote <cmd> repeat [OPTS] [délai] [commande] rm [-r] [-f] <fichiers> rmdir [-f] <répertoires> scache [<num_session>] set [OPT] [<var> [<val>]] site <site-cmd> source <fichier> torrent [-O <dir>] <file|URL>... user <user|URL> [<pass>] wait [<num_travail>] zcat <fichiers> zmore <fichiers>
# lister les fichiers et dossiers lftp my-user@host:/> ls drwx---r-x 2 41429 users 3 Nov 3 19:27 . drwx---r-x 2 41429 users 3 Nov 3 19:27 .. -rw----r-- 1 41429 users 6 Jan 16 2012 index.php
# Télécharger un fichier depuis le serveur vers votre poste local lftp tickapp-tuto@ftp.cluster006.ovh.net:/> get index.php 6 octets transférés lftp tickapp-tuto@ftp.cluster006.ovh.net:/>
# Créer un dossier lftp my-user@host:/> mkdir www mkdir ok, « www » créé
# Se déplacer dans un dossier lftp my-user@host:/> cd www/ lftp my-user@host:/www>
Dans l’ensemble la plupart des commandes sont aussi simple que celles-ci à utiliser.
À noter un comportement intéressant, si vous pouvez exécuter des commandes shell en local en les préfixant par un point d’exclamation. swag.
# ls sur le serveur distant lftp my-user@host:/> ls drwx---r-x 2 41429 users 3 Nov 3 19:27 . drwx---r-x 2 41429 users 3 Nov 3 19:27 .. -rw----r-- 1 41429 users 6 Jan 16 2012 index.php # ls sur votre poste local lftp my-user@host:/> !ls App Bureau Documents Images kdenlive Modèles Musique Projects Public Téléchargements Vidéos
Vous constaterez que la commande ls applique automatique les options -la
sur le serveur. Si vous souhaitez seulement la liste des fichiers il faut utiliser cls
Par ailleurs il y a un comportement particulier avec la commande !cd
, elle est temporaire, exemple:
lftp my-user@host:/> !ls App Bureau Documents Images kdenlive Modèles Musique Projects Public Téléchargements Vidéos lftp my-user@host:/> !cd App lftp my-user@host:/> !ls App Bureau Documents Images kdenlive Modèles Musique Projects Public Téléchargements Vidéos lftp my-user@host:/> !cd App && ls pycharm-4.5 android-studio Sublime Text 2
Vous remarquerez, pas de point d’exclamation devant ls
. Par ailleurs si vous voulez que le déplacement soit effectif il faut utiliser lcd
.
Mode ligne de commande
Le mode intéractif c’est cool, mais clairement le plus intéressant c’est de pouvoir exécuter des commandes FTP en une seule ligne de commande, ce qui permet d’utiliser lftp dans un script bash.
Pour cela faut utiliser le paramètre -e. Exemple :
lftp login:password@host -e "cd /path/ftp; put monfichier.tar; exit"
On voit que le paramètre -e prends l’ensemble des commandes que l’on veut exécuter, ce qui est très pratique pour un script.
Toutes les commandes que je vous présentées juste au dessus sont utilisables de cette façon.
Sauvegarde de l’ensemble du dossier
Nous allons maintenant découvrir la commande qui va nous permettre de faire des savegardes de dossier distant vers votre poste local, et inversement. La bien nommée mirror
# Copier le dossier distant path/ftp en local lftp login:password@host -e "mirror path/ftp/;exit" # Copier le dossier distant path/ftp dans le dossier local /tmp/backup lftp login:password@host -e "mirror path/ftp/ /tmp/backup;exit" # En ajoutant l'option -R à mirror, on inverse le fonctionnement # et on copie un dossier local vers le serveur # Copier le dossier local /tmp/backup sur le serveur lftp login:password@host -e "mirror -R /tmp/backup;exit" # Copier le dossier local /tmp/backup dans le dossier distant toto/ lftp login:password@host -e "mirror -R /tmp/backup toto/;exit"
La commande mirror prends aussi une option -e qui permet de ne télécharger que les nouveaux fichiers et les fichiers modifiés.
On a fait plus ou moins le tour de lftp. Une vidéo arrive bientôt 😉