29Jun

Shell-Skript zum Hochladen einer Datei in dasselbe Unterverzeichnis auf einem Remote-Server

click fraud protection

Eine sehr häufige Aufgabe für einen Webentwickler ist das Hochladen einer einzelnen Datei von einem Unterverzeichnis auf Ihrer Entwicklungsumgebung in dasselbe Unterverzeichnis auf einem entfernten Server. Leider ist dies immer ein lästiger manueller Prozess, bei dem Verzeichnisse auf beiden Servern ausgetauscht werden müssen und viel Zeit verschwendet wird.

Also, ich habe es mir zu eigen gemacht, ein Shell-Skript zu schreiben, um dies für mich zu automatisieren, mit scp für sicheres Kopieren von Dateien.(Wichtiger Hinweis: ftp ist furchtbar unsicher, benutze stattdessen WinSCP)

Das Hauptproblem war, dass meine WordPress-Installation auf meinem Entwicklungscomputer ein anderes Basisverzeichnis hat als die Installation auf meinem Server. Auf meiner Entwicklungsmaschine ist es /var/ www, und auf meinem Server ist etwas wie /var/www/howtogeek/docs/.Ich entschied mich, diese am Anfang des Skripts in Variablen zu verschieben, wie folgt:

[email protected]
RDIR = /var/www/howtogeek/ Dokumentation
LDIR = '\ / var \ / www'

instagram viewer

Beachten Sie, dass das lokale Verzeichnis( LDIR) im Skript hat ein \ vor jedem / im Pfad. Dies liegt daran, dass wir dies später im Skript an einen sed-Befehl übergeben werden, sodass wir diesen Werten entkommen müssen. Ich bin mir sicher, dass es einen anderen Weg gibt, aber ich bin mir dessen nicht bewusst.

Als nächstes habe ich automatisierte SSH-Logins eingerichtet. Dazu müssen Sie zuerst das Dienstprogramm ssh keygen wie folgt ausführen:

ssh-keygen -t rsa

Anschließend müssen Sie die Datei ~ /.ssh/ id_rsa.pub in die Datei ~ /.ssh/ authorized_keys auf dem Remote-Server kopieren. Wenn das Verzeichnis ~ /. ssh bereits auf dem Remote-Server erstellt wurde( dies könnte überprüft werden), können Sie diesen Befehl ausführen, um die Schlüssel zu kopieren:

cat ~ /.ssh/ id_rsa.pub |ssh Benutzer @ Hostname 'cat & gt; & gt;.ssh / authorized_keys '

Jetzt haben wir automatisierte SSH-Logins, die es ermöglichen, das scp-Dienstprogramm ohne Passwort zu benutzen. Sehen wir uns nun den scp-Befehl an, den wir im Skript verwenden werden:

scp $ 1 $ SSHSERVER: $ RDIR`pwd | sed "s / ${ LDIR} //" `/` echo $ 1 | sed 's /.* \ /// '`

$ 1 ist der Parameter, den Sie an das Skript für den Dateinamen übergeben, den Sie hochladen möchten.$ SSHSERVER und $ RDIR sind Variablen, die wir am Anfang des Skripts setzen, um den Benutzer @ Hostname und den vorhergehenden Remote-Pfad zu setzen.

Der erste Block, der mit pwd | sed beginnt, übernimmt den aktuellen Verzeichnispfad und entfernt den vorherigen Teil des Pfads, der nicht mit dem Remote-Server übereinstimmt, aber den Rest des Pfads belässt. Wenn Sie zum Beispiel in /var/www/ wp-content waren / wenn Sie den Befehl ausgeführt haben, würde der sed-Block das /var/-WWW basierend auf unserer LDIR-Variable entfernen, aber den / wp-content / -Teil davon lassen.

Der zweite Block stellt nur sicher, dass der gesamte vorhergehende Pfad von dem an das Skript übergebenen Dateinamen entfernt wird, so dass Sie nur den Dateinamen erhalten.

Zum Beispiel, wenn Sie das Skript up.sh benannt haben und es von Ihrem lokalen /var/www/ wp-content /plugins/-Verzeichnis für eine Datei ausgeführt haben:

up.sh myplugin.php

Dies wäre von der Shell wie folgt erweitert worden:

scpmyplugin.php [email protected]: /var/www/howtogeek/docs/ wp-content /plugins/ myplugin.php

Anstatt zu versuchen, eine eigene Skriptdatei basierend auf dem Artikel zu erstellen, habe ich es für Sie zum Download bereitgestellt. Auf diese Weise wird es keine Probleme mit Sonderzeichen geben, die nicht funktionieren. .. und ja, ich habe das Skript verwendet, um sich hochzuladen =)

Geek-Uploader.sh herunterladen

Einfach irgendwo in deinen Pfad einfügen und alles benennen, was du willst. Ich habe meinen in "up" umbenannt, also kann ich einfach "up filename.txt" eingeben, um hochzuladen. Denken Sie auch daran, es zu öffnen und die Variablen am Anfang des Skripts entsprechend Ihrer Umgebung zu ändern.

Dieses Skript sollte mit einer * nix-Shell und dem Dienstprogramm scp funktionieren. Ich benutze Ubuntu, aber es sollte unter Solaris, OS X oder sogar Windows mit Cygwin funktionieren.