Hjemmeside » hvordan » Shell Script til at uploade en fil til den samme underkatalog på en fjernserver

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

    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 slutter det altid at være 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. (Vigtigt 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, sådan:

    [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

    Derefter 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:

    kat ~ / .ssh / id_rsa.pub | ssh bruger @ værtsnavn 'cat >> .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 stripen / 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 vej ud af filnavnet, der er bestået til scriptet, så du bare får filnavnet.

    For eksempel, hvis du navngav scriptet up.sh og kørte det fra dit lokale / var / www / wp-indhold / plugins / directory på en fil:

    up.sh myplugin.php

    Dette ville have været udvidet af skallen som følgende:

    scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/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 mine 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å noget med en * nix shell og scp utility. Jeg bruger Ubuntu, men det skal arbejde på Solaris, OS X, eller endda Windows med Cygwin installeret.