Eine sehr häufige Aufgabe für einen Webentwickler ist das Hochladen einer einzelnen Datei aus einem Unterverzeichnis Ihrer Entwicklungsbox in dasselbe Unterverzeichnis auf einem Remote-Server. Leider ist dies immer ein ärgerlicher manueller Prozess, bei dem Verzeichnisse auf beiden Servern umgeschaltet werden müssen, und dies kostet viel Zeit.

Daher habe ich es mir zur Aufgabe gemacht, ein Shell-Skript zu schreiben, um dies für mich zu automatisieren, indem ich scp zum sicheren Kopieren von Dateien verwendet. (Wichtiger Hinweis zur Seite: ftp ist furchtbar unsicher, verwenden Sie stattdessen WinSCP)

Das zu lösende Hauptproblem bestand darin, dass meine WordPress-Installation auf meinem Entwicklungscomputer ein anderes Basisverzeichnis hat als die Installation auf meinem Server. Auf meinem Entwicklungscomputer ist dies / var / www, und auf meinem Server ist etwas mehr 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/docs LDIR=’/var/www’

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

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

ssh-keygen -t rsa

Dann müssen Sie die Datei ~ / .ssh / id_rsa.pub in die Datei ~ / .ssh / authorised_keys auf dem Remote-Server kopieren. Wenn das Verzeichnis ~ / .ssh bereits auf dem Remote-Server erstellt wurde (möchten Sie vielleicht prüfen), können Sie diesen Befehl ausführen, um die Schlüssel über zu kopieren:

cat ~/.ssh/id_rsa.pub | ssh [email protected] ‘cat >> .ssh/authorized_keys’

Jetzt gibt es automatisierte ssh-Logins, die die Verwendung des Dienstprogramms scp ohne Kennwort ermöglichen. Schauen wir uns nun den Befehl scp an, den wir im Skript verwenden werden:

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

Der $ 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 festlegen, um den Benutzer @ Hostnamen und den vorhergehenden Remote-Pfad festzulegen.

Der erste Block, der mit pwd | sed beginnt, nimmt den aktuellen Verzeichnispfad und entfernt den vorherigen Teil des Pfads, der nicht mit dem Remote-Server übereinstimmt. Der Rest des Pfads bleibt jedoch erhalten. Wenn Sie sich zum Beispiel in / var / www / wp-content / befanden, als Sie den Befehl ausgeführt haben, würde der sed-Block die Datei / var / www basierend auf unserer LDIR-Variablen entfernen, aber den Teil / wp-content / belassen .

Der zweite Block stellt nur sicher, dass der gesamte vorangehende Pfad von dem an das Skript übergebenen Dateinamen entfernt wird, sodass nur der Dateiname angezeigt wird.

Wenn Sie beispielsweise das Skript up.sh benannt und es in Ihrem lokalen Verzeichnis / var / www / wp-content / plugins / in einer Datei ausgeführt haben:

up.sh myplugin.php

Dies hätte die Shell wie folgt erweitert:

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

Anstatt zu versuchen, basierend auf dem Artikel eine eigene Skriptdatei zu erstellen, habe ich sie zum Download bereitgestellt. Auf diese Weise gibt es keine Probleme mit Sonderzeichen, die nicht funktionieren… und ja, ich habe das Skript verwendet, um sich selbst hochzuladen =)

Laden Sie geek-uploader.sh herunter

Setzen Sie es einfach irgendwo in Ihren Weg und nennen Sie es, was Sie wollen. Ich habe meine in nur "up" umbenannt, so dass ich einfach "up filename.txt" eingeben kann, um sie hochzuladen. Denken Sie auch daran, es zu öffnen und die Variablen am Anfang des Skripts an Ihre Umgebung anzupassen.

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

Top-Tipps:
Kommentare: