29Jun

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

click fraud protection

Een veel voorkomende taak voor een webontwikkelaar is het uploaden van een enkel bestand vanuit een submap in uw ontwikkelbox naar dezelfde subdirectory op een externe server. Helaas is dit altijd een vervelend handmatig proces waarbij je van directory wisselt op beide servers en dat kost veel tijd.

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

Het belangrijkste probleem dat moest worden opgelost was dat mijn WordPress-installatie op mijn ontwikkelmachine een andere basisdirectory heeft 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 heb besloten om die variabelen aan het begin van het script te verplaatsen, zoals deze:

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

instagram viewer

Merk op dat de lokale directory( LDIR)) in het script heeft een \ vóór elk / in het pad. Dit komt omdat we dit later in het script in een sed-commando zullen doorgeven, dus we moeten aan die waarden ontsnappen. Ik weet zeker dat er een andere manier is om dit te omzeilen, maar ik weet het niet.

Vervolgens stel ik geautomatiseerde ssh-logins in. Om dit te doen, moet je eerst het hulpprogramma ssh keygen als volgt uitvoeren:

ssh-keygen -t rsa

Vervolgens moet je het bestand ~ /.ssh/ id_rsa.pub kopiëren naar het bestand ~ /.ssh/ authorized_keys op de externe server. Als de directory ~ /. ssh al is gemaakt op de externe server( wilt u mogelijk controleren), dan kunt u deze opdracht uitvoeren om de sleutels te kopiëren:

cat ~ /.ssh/ id_rsa.pub |ssh user @ hostname 'cat & gt; & gt;.ssh / authorized_keys '

Nu hebben we geautomatiseerde ssh-logins, waarmee het scp-hulpprogramma zonder wachtwoord kan worden gebruikt. Laten we nu eens kijken naar de scp-opdracht die we in het script gebruiken:

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

De $ 1 is de parameter die u doorgeeft aan het script voor 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 vorige externe pad in te stellen.

Het eerste blok dat begint met pwd | sed neemt het huidige directorypad en verwijdert het vorige deel van het pad dat niet overeenkomt met de externe server, maar laat de rest van het pad achter. 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 / een deel ervan achterlaten.

Het tweede blok zorgt er gewoon voor dat u het hele vorige pad van de bestandsnaam die aan het script is doorgegeven, verwijdert, zodat u de bestandsnaam krijgt.

Bijvoorbeeld, als u het script up.sh hebt genoemd en het vanuit uw lokale /var/www/-directory wp-content /plugins/ op een bestand heeft uitgevoerd:

up.sh myplugin.php

Dit zou door de shell als volgt zijn uitgebreid:

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

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

Download geek-uploader.sh

Zet het gewoon ergens op je pad en noem het wat je maar wilt. Ik hernoemde de mijne om gewoon "omhoog" te gaan, dus ik kan gewoon "up filename.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 moeten werken op alles 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.