in

Script Shell pour télécharger un fichier dans le même sous-répertoire sur un serveur distant

Une tâche très courante pour un développeur Web consiste à télécharger un seul fichier d’un sous-répertoire de votre boîte de développement vers le même sous-répertoire sur un serveur distant. Malheureusement, cela finit toujours par être un processus manuel ennuyeux impliquant le changement de répertoire sur les deux serveurs, et perd beaucoup de temps.

J’ai donc pris l’initiative d’écrire un script shell pour automatiser cela pour moi, en utilisant scp pour la copie sécurisée de fichiers. (Note latérale importante: ftp est terriblement incertain, utilisez WinSCP au lieu)

Le principal problème à résoudre était que mon installation WordPress sur ma machine de développement a un répertoire de base différent de celui de l’installation sur mon serveur. Sur ma machine de développement, c’est / var / www, et sur mon serveur, c’est quelque chose qui ressemble plus à / var / www / howtogeek / docs /. J’ai décidé de simplement les déplacer dans des variables au début du script, comme ceci:

SSHSERVER=thegeek@hostname.com
RDIR = / var / www / howtogeek / docs
LDIR = ‘ / var / www’

Notez que le répertoire local (LDIR) dans le script a un avant chaque / dans le chemin. C’est parce que nous allons passer cela dans une commande sed plus tard dans le script, nous devons donc échapper à ces valeurs. Je suis sûr qu’il y a un autre moyen de contourner cela, mais je ne suis pas au courant.

Ensuite, j’ai mis en place des connexions SSH automatisées. Pour ce faire, vous devez d’abord exécuter l’utilitaire ssh keygen comme suit:

ssh-keygen -t rsa

Ensuite, vous devez copier le fichier ~ / .ssh / id_rsa.pub dans le fichier ~ / .ssh / allowed_keys sur le serveur distant. Si le répertoire ~ / .ssh est déjà créé sur le serveur distant (vous voudrez peut-être vérifier), vous pouvez exécuter cette commande pour copier les clés:

cat ~ / .ssh / id_rsa.pub | ssh utilisateur @ nom_hôte ‘cat >> .ssh / clés_autorisées’

Nous avons maintenant des connexions ssh automatisées, qui permettront d’utiliser l’utilitaire scp sans mot de passe. Jetons maintenant un coup d’œil à la commande scp que nous utiliserons dans le script:

scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed « s / $ {LDIR} // » `/` echo $ 1 | sed ‘s /.*///’ `

Le $ 1 est le paramètre que vous passerez au script pour le nom de fichier que vous essayez de télécharger. $ SSHSERVER et $ RDIR sont des variables que nous définirons au début du script pour définir l’utilisateur @ hostname et le chemin distant précédent.

Le premier bloc qui commence par pwd | sed prend le chemin du répertoire actuel et supprime la partie précédente du chemin qui ne correspond pas au serveur distant, mais laisse le reste du chemin. Par exemple, si vous étiez dans / var / www / wp-content / lorsque vous exécutez la commande, le bloc sed supprimerait / var / www en fonction de notre variable LDIR, mais en laisserait la partie / wp-content / .

Le deuxième bloc s’assure simplement de supprimer tout le chemin précédent du nom de fichier passé au script afin que vous obteniez simplement le nom de fichier.

Par exemple, si vous avez nommé le script up.sh et l’avez exécuté à partir de votre répertoire local / var / www / wp-content / plugins / sur un fichier:

up.sh myplugin.php

Cela aurait été développé par le shell comme suit:

scp myplugin.php thegeek@hostname.com: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php

Au lieu d’essayer de créer votre propre fichier de script basé sur l’article, je vous l’ai fourni à télécharger. De cette façon, il n’y aura aucun problème avec les caractères spéciaux qui ne fonctionnent pas … et oui, j’ai utilisé le script pour se télécharger =)

Télécharger geek-uploader.sh

Mettez-le simplement quelque part sur votre chemin et nommez-le comme vous voulez. J’ai renommé le mien en «up», donc je peux simplement taper «up filename.txt» pour télécharger. N’oubliez pas également de l’ouvrir et de modifier les variables au début du script pour qu’elles correspondent à votre environnement.

Ce script devrait fonctionner sur tout ce qui a un shell * nix et l’utilitaire scp. J’utilise Ubuntu, mais cela devrait fonctionner sur Solaris, OS X ou même Windows avec Cygwin installé.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

5 façons de récupérer de l'espace

5 façons de récupérer de l’espace

Comment se connecter à un VPN sur un Chromebook