Sonntag, 4. März 2012

Shell Script om een ​​bestand te uploaden naar dezelfde Subdirectory op een externe server

Een veel voorkomende taak voor een web ontwikkelaar is het uploaden van een bestand uit een subdirectory op je ontwikkeling box om dezelfde subdirectory op een externe server. Helaas is dit eindigt altijd als een vervelende handmatig proces, waarbij inschakelen mappen op beide servers, en afval een grote hoeveelheid tijd.

Dus, ik heb het op me genomen om een ​​shell script schrijven om dit te automatiseren voor mij, met behulp van scp voor een veilige kopiëren van bestanden. (Belangrijk Kantlijnnotitie: ftp is verschrikkelijk onzeker, gebruik WinSCP instead)

Het grootste probleem op te lossen was dat mijn WordPress installeren op mijn ontwikkeling machine heeft een andere basis dan de installatie map op mijn server. Op mijn ontwikkeling machine is dit / var / www, en op mijn server is iets meer als / var / www / howtogeek / docs /. Ik besloot om alleen die in variabelen te verplaatsen in het begin van het script, zoals deze:

SSHSERVER=thegeek@hostname.com
RDIR=/var/www/howtogeek/docs
LDIR = ' / var / www "

Merk op dat de lokale directory (LDIR) in het script een voor elke / in de weg heeft. Dit is omdat we gaan deze pas in een sed commando later in het script, dus moeten we die waarden te ontsnappen. Ik weet zeker dat er een andere manier om dit, maar ik ben niet van bewust.

Vervolgens richtte ik automatische ssh logins. Om dit te doen, moet u het hulpprogramma ssh keygen eerste run als volgt:

ssh-keygen-t rsa

Dan moet je het bestand ~ / .ssh / id_rsa.pub bestand te kopiëren naar ~ / .ssh / authorized_keys bestand op de remote server. . Als de ~ / ssh directory is al gemaakt op de remote server (zou willen controleren), dan kun je dit commando om de sleutels te kopiëren over:

cat ~ / .ssh / id_rsa.pub | ssh gebruiker @ hostnaam "cat>> .ssh / authorized_keys"

Nu hebben we geautomatiseerd ssh logins, waarmee het gebruik van de scp hulpprogramma zonder een wachtwoord. Laten we nu eens kijken naar de scp commando's die we zullen gebruiken in het script:

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

De $ 1 is de parameter die u zult aan het script pas voor de bestandsnaam die u probeert te uploaden. $ Sshserver en $ RDIR zijn variabelen zullen we aan het begin van het script voor de gebruiker @ hostnaam en de daaraan voorafgaande remote pad te zetten.

Het eerste blok, dat begint met pwd | sed neemt de huidige directory pad en strips uit het voorgaande deel van het pad dat niet overeenkomt met de externe server, maar laat de rest van het pad. Bijvoorbeeld, als je in / var / www / wp-content / wanneer u de opdracht liep, de sed blok zou strip uit de / var / www op basis van onze LDIR variabel, maar laat de / wp-content / deel van het .

Het tweede blok zorgt ervoor dat alleen maar strip uit de hele voorgaande traject uit de bestandsnaam wordt doorgegeven aan het script, zodat je gewoon de bestandsnaam.

Bijvoorbeeld, als u de naam van de script up.sh en liep van uw lokale / var / www / wp-content / plugins / directory op een bestand:

up.sh myplugin.php

Dit zou zijn uitgebreid door de shell als de volgende:

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

In plaats van te proberen om je eigen script bestand op basis van het artikel te maken, heb ik op voorwaarde dat het voor u om te downloaden. Op die manier zal er geen problemen met speciale tekens werken niet ... en ja, ik gebruikte het script om zichzelf te uploaden =)

Download geek-uploader.sh

Gewoon ergens zet het in je pad, en noem maar op wat je wilt. Ik heb de namen van mij gewoon "up", dus ik kan typ je gewoon "tot bestandsnaam.txt" te uploaden. Ook niet vergeten om het te openen en de variabelen te wijzigen aan het begin van het script voor uw omgeving.

Dit script zou moeten werken op alles met een * nix shell en het scp nut. Ik gebruik Ubuntu, maar het moet op Solaris, OS X, of zelfs Windows te werken met Cygwin geïnstalleerd.

Keine Kommentare:

Kommentar veröffentlichen