Domača » kako » Shell Script za nalaganje datoteke v isti podimenik na oddaljenem strežniku

    Shell Script za nalaganje datoteke v isti podimenik na oddaljenem strežniku

    Zelo pogosta naloga za spletnega razvijalca je, da prenese eno datoteko iz podimenika na vašem razvojnem polju v isti podimenik na oddaljenem strežniku. Na žalost je to vedno moteč ročni postopek, ki vključuje preklapljanje imenikov na obeh strežnikih, in zapravlja veliko časa.

    Torej, sem si vzel na sebe, da napišem lupinski skript, ki bi to avtomatiziral zame, z uporabo scp za varno kopiranje datotek. (Pomembna stran Opomba: ftp je strašno negotov, namesto tega uporabite WinSCP)

    Glavni problem, ki ga je bilo treba rešiti, je, da je moj WordPress nameščen na mojem razvojnem stroju drugačen osnovni imenik od namestitve na moj strežnik. Na mojem razvojnem računalniku je / var / www, in na mojem strežniku je nekaj več kot / var / www / howtogeek / docs /. Odločil sem se, da jih premaknem v spremenljivke na začetku scenarija, na primer:

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

    Upoštevajte, da ima lokalni imenik (LDIR) v skriptu pred vsako / v poti. To je zato, ker bomo to prenesli v ukaz sed pozneje v skriptu, zato se moramo znebiti teh vrednosti. Prepričan sem, da obstaja kakšen drug način, vendar se tega ne zavedam.

    Nato nastavim avtomatizirane prijave ssh. Če želite to narediti, morate najprej zagnati ssh keygen pripomoček tako:

    ssh-keygen -t rsa

    Nato morate kopirati datoteko ~ / .ssh / id_rsa.pub v datoteko ~ / .ssh / authorized_keys na oddaljenem strežniku. Če je imenik ~ / .ssh že ustvarjen na oddaljenem strežniku (morda želite preveriti), lahko zaženete ta ukaz, da prekopirate ključe:

    cat ~ / .ssh / id_rsa.pub | ssh uporabnik @ ime gostitelja 'cat >> .ssh / authorized_keys'

    Zdaj imamo avtomatizirane prijave ssh, ki omogočajo uporabo pripomočka scp brez gesla. Zdaj pa si poglejmo ukaz scp, ki ga bomo uporabili v skriptu:

    scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed “s / $ LDIR //” '/' echo $ 1 | sed 's /.* \ t

    $ 1 je parameter, ki ga boste prenesli na skript za ime datoteke, ki ga želite prenesti. $ SSHSERVER in $ RDIR sta spremenljivki, ki ju nastavimo na začetku skripta, da nastavimo uporabniško ime_gostitelja in predhodno oddaljeno pot.

    Prvi blok, ki se začne s pwd | sed, sprejema trenutno pot imenika in odstranjuje prejšnji del poti, ki se ne ujema z oddaljenim strežnikom, vendar zapusti preostalo pot. Na primer, če ste bili v datoteki / var / www / wp-content /, ko ste zagnali ukaz, bi blok sed upril / var / www na podlagi naše spremenljivke LDIR, vendar pa bo del / wp-content / del.

    Drugi blok preprosto poskrbi, da odstranite celotno predhodno pot pred imenom datoteke, ki je posredovana skripti, tako da dobite ime datoteke.

    Na primer, če ste poimenovali skript up.sh in ga pognali iz vašega lokalnega / var / www / wp-content / plugins / imenika v datoteki:

    up.sh myplugin.php

    Z lupino bi to razširili na naslednji način:

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

    Namesto, da bi skušali ustvariti svojo lastno datoteko skriptov na podlagi članka, sem vam ga priskrbel za prenos. Na ta način ne bo nobenih težav s posebnimi znaki, ki ne delujejo… in da, uporabil sem skript za nalaganje samih =)

    Prenesite geek-uploader.sh

    Samo postavite ga nekje na vašo pot in ga poimenujte, kar želite. Moje ime sem preimenoval v »up«, tako da lahko vnesem »up filename.txt« za nalaganje. Ne pozabite ga odpreti in spremeniti spremenljivke na začetku skripta, da se ujemajo z vašim okoljem.

    Ta skript bi moral delati na karkoli z lupino * nix in pripomočkom scp. Uporabljam Ubuntu, vendar bi moral delati na Solarisu, OS X ali celo Windows z nameščenim Cygwinom.