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

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

Een veel voorkomende taak voor een webontwikkelaar ishet uploaden van een enkel bestand vanuit een submap in uw ontwikkelvak naar dezelfde submap op een externe server. Helaas wordt dit altijd een vervelend handmatig proces waarbij mappen op beide servers worden omgeschakeld, en het verspilt veel tijd.

Dus ik heb het op me genomen om een ​​shellscript te schrijven om dit voor mij te automatiseren, met behulp van scp voor veilig kopiëren van bestanden. (Belangrijke kanttekening: ftp is verschrikkelijk onzeker, gebruik in plaats daarvan WinSCP)

Het grootste probleem om op te lossen was dat mijn WordPressinstalleren op mijn ontwikkelmachine heeft een andere basismap dan de installatie op mijn server. Op mijn ontwikkelmachine is het / var / www, en op mijn server lijkt het meer op / var / www / howtogeek / docs /. Ik besloot om die naar variabelen te verplaatsen aan het begin van het script, zoals hier:

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

Merk op dat de lokale map (LDIR) in het scriptheeft een voor elk / in het pad. Dit komt omdat we dit later in het script doorgeven aan een sed-commando, dus we moeten aan die waarden ontsnappen. Ik weet zeker dat er een andere manier is om dit te omzeilen, maar ik ben me er niet van bewust.

Vervolgens heb ik geautomatiseerde SSH-aanmeldingen ingesteld. Om dit te doen, moet u eerst het hulpprogramma ssh keygen als volgt uitvoeren:

ssh-keygen -t rsa

Dan moet je de ~ / .ssh / id_rsa kopiëren.pub-bestand naar ~ / .ssh / Authorized_keys-bestand op de externe server. Als de map ~ / .ssh al is gemaakt op de externe server (wilt u misschien controleren), kunt u deze opdracht uitvoeren om de sleutels te kopiëren naar:

cat ~ / .ssh / id_rsa.pub | ssh-gebruiker @ hostnaam ‘cat >> .ssh / geautoriseerde_sleutels’

Nu hebben we geautomatiseerde SSH-aanmeldingen, waarmee u het scp-hulpprogramma zonder wachtwoord kunt gebruiken. Laten we nu eens kijken naar de scp-opdracht die we in het script zullen gebruiken:

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

De $ 1 is de parameter die u aan het script doorgeeftvoor de bestandsnaam die u probeert te uploaden. $ SSHSERVER en $ RDIR zijn variabelen die we aan het begin van het script zullen instellen om de gebruiker @ hostnaam en het voorafgaande externe pad in te stellen.

Het eerste blok dat begint met pwd | sed neemthet huidige mappad en verwijdert het voorgaande gedeelte van het pad dat niet overeenkomt met de externe server, maar de rest van het pad verlaat. Als u bijvoorbeeld in / var / www / wp-content / was toen u de opdracht uitvoerde, zou het sed-blok de / var / www verwijderen op basis van onze LDIR-variabele, maar de / wp-content / deel ervan achterlaten .

Het tweede blok zorgt er alleen voor dat het hele voorafgaande pad wordt verwijderd van de bestandsnaam die aan het script is doorgegeven, zodat u alleen de bestandsnaam krijgt.

Als u bijvoorbeeld het script up.sh hebt genoemd en het vanuit uw lokale / var / www / wp-content / plugins / map in een bestand hebt uitgevoerd:

up.sh myplugin.php

Dit zou door de shell als volgt zijn uitgebreid:

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

In plaats van te proberen uw eigen scriptbestand te makenop basis van het artikel, heb ik het voor u beschikbaar gesteld om te downloaden. Op die manier zijn er geen problemen met speciale tekens die niet werken ... en ja, ik heb het script gebruikt om zichzelf te uploaden =)

Geek-uploader.sh downloaden

Leg het gewoon ergens op uw pad en noem hetwat jij wilt. Ik heb de mijne hernoemd naar gewoon "omhoog", dus ik kan gewoon "omhoog bestandsnaam.txt" typen om te uploaden. Vergeet ook niet om het te openen en de variabelen aan het begin van het script aan te passen aan uw omgeving.

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