29Jun

Shell Script til at uploade en fil til den samme underkatalog på en ekstern server

En meget almindelig opgave for en webudvikler er at uploade en enkelt fil fra en undermappe i din udviklingsboks til samme undermappe på en fjernserver. Desværre er det altid en irriterende manuel proces, der involverer at skifte mapper på begge servere og spilder meget tid.

Så jeg har taget det på mig selv for at skrive et shell script til at automatisere dette for mig, ved hjælp af scp for sikker filkopiering.(Vigtig side Bemærk: ftp er forfærdeligt usikkert, brug WinSCP i stedet)

Det største problem at løse var, at min WordPress install på min udviklingsmaskine har en anden base mappe end installationen på min server. På min udviklingsmaskine er det /var/ www, og på min server er noget mere som /var/www/howtogeek/docs/.Jeg besluttede at bare flytte dem til variabler i begyndelsen af ​​scriptet, som dette:

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

Bemærk, at den lokale mappe( LDIR) i scriptet har en \ før hver / i stien. Dette skyldes, at vi skal overføre dette til en sed-kommando senere i scriptet, så vi må undslippe disse værdier. Jeg er sikker på, at der er en anden vej rundt om dette, men jeg er ikke klar over det.

Dernæst opretter jeg automatiske ssh logins. For at gøre dette skal du først køre ssh keygen-værktøjet som sådan:

ssh-keygen -t rsa

Så skal du kopiere filen ~ /.ssh/ id_rsa.pub til ~ /.ssh/ authorized_keys-filen på den eksterne server. Hvis ~ /. ssh-mappen allerede er oprettet på den eksterne server( måske vil du kontrollere), kan du køre denne kommando for at kopiere nøglerne over:

cat ~ /.ssh/ id_rsa.pub |ssh bruger @ værtsnavn 'cat & gt; & gt;.ssh / authorized_keys '

Nu har vi automatiske ssh logins, som gør det muligt at bruge scp-hjælpeprogrammet uden et kodeord. Lad os nu se på den scp-kommando, vi vil bruge i scriptet:

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

$ 1 er den parameter, du sender til scriptet for det filnavn, du forsøger at uploade.$ SSHSERVER og $ RDIR er variabler, vi sætter i begyndelsen af ​​scriptet for at indstille bruger @ værtsnavn og den foregående fjernvej.

Den første blok, der starter med pwd | sed, fjerner den nuværende mappe og strimler fra den foregående del af stien, der ikke svarer til den eksterne server, men efterlader resten af ​​stien. Hvis du f.eks. Var i /var/www/ wp-indhold / når du kørte kommandoen, ville sed-blokken fjerne /var/ www baseret på vores LDIR-variabel, men forlad det / wp-indhold / en del af det.

Den anden blok sørger bare for at fjerne hele den foregående sti ud af filnavnet, der overføres til scriptet, så du bare får filnavnet.

Hvis du for eksempel navngav scriptet up.sh og kørte det fra din lokale /var/www/ wp-indhold /plugins/-mappe på en fil:

up.sh myplugin.php

Dette ville være blevet udvidet af shell som følgende:

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

I stedet for at forsøge at oprette din egen scriptfil baseret på artiklen, har jeg givet det til rådighed for dig at downloade. På den måde vil der ikke være problemer med specialtegn, der ikke virker. .. og ja, jeg brugte scriptet til at uploade sig selv =)

Download geek-uploader.sh

Bare sæt det et sted i din vej, og navngiv det, hvad du vil. Jeg omdøbte min til bare "op", så jeg kan bare skrive "op filename.txt" for at uploade. Husk også at åbne den og ændre variablerne i begyndelsen af ​​scriptet for at matche dit miljø.

Dette script skal arbejde på alt med en * nix shell og scp utility. Jeg bruger Ubuntu, men det skal fungere på Solaris, OS X, eller endda Windows med Cygwin installeret.