Početna » kako da » Shell skripta za učitavanje datoteke u isti poddirektorij na udaljenom poslužitelju

    Shell skripta za učitavanje datoteke u isti poddirektorij na udaljenom poslužitelju

    Vrlo uobičajena zadaća za web developera je učitavanje jedne datoteke iz poddirektorija na vašem razvojnom okviru u isti poddirektorij na udaljenom poslužitelju. Nažalost, to uvijek završava kao neugodan ručni proces koji uključuje prebacivanje direktorija na oba poslužitelja i gubi mnogo vremena.

    Stoga sam se obvezao napisati shell skriptu za automatiziranje, koristeći scp za sigurno kopiranje datoteka. (Važna strana Napomena: ftp je užasno nesiguran, umjesto toga koristite WinSCP)

    Glavni problem riješiti je da je moj WordPress instalirati na moj razvojni stroj ima drugačiji osnovni imenik od instalacije na mom poslužitelju. Na mom razvojnom stroju je / var / www, a na mom poslužitelju nešto je više kao / var / www / howtogeek / docs /. Odlučio sam ih premjestiti u varijable na početku skripte, na ovaj način:

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

    Imajte na umu da lokalni direktorij (LDIR) u skripti ima svaki od / na stazi. To je zato što ćemo to kasnije prenijeti u sed naredbu u skripti, tako da moramo izbjeći te vrijednosti. Siguran sam da postoji neki drugi način za ovo, ali ja to nisam svjestan.

    Zatim postavljam automatizirane ssh prijave. Da biste to učinili, najprije morate pokrenuti uslužni program ssh keygen tako:

    ssh-keygen -t rsa

    Zatim trebate kopirati datoteku ~ / .ssh / id_rsa.pub u datoteku ~ / .ssh / authorized_keys na udaljenom poslužitelju. Ako je ~ / .ssh direktorij već kreiran na udaljenom poslužitelju (možda želite provjeriti), tada možete pokrenuti ovu naredbu da biste kopirali ključeve:

    mačka ~ / .ssh / id_rsa.pub | ssh korisnik @ naziv hosta "mačka >> .ssh / authorized_keys"

    Sada imamo automatizirane ssh prijave koje će omogućiti korištenje uslužnog programa scp bez lozinke. Sada pogledajmo naredbu scp koju ćemo koristiti u skripti:

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

    $ 1 je parametar koji ćete prenijeti na skriptu za ime datoteke koju pokušavate prenijeti. $ SSHSERVER i $ RDIR su varijable koje ćemo postaviti na početku skripte kako bismo postavili korisničko ime i prethodno udaljeno putanje.

    Prvi blok koji počinje s pwd | sed vodi trenutnu putanju imenika i skida prethodni dio puta koji ne odgovara udaljenom poslužitelju, ali ostavlja ostatak staze. Na primjer, ako ste bili u / var / www / wp-content / kada ste pokrenuli naredbu, sed blok bi uklonio / var / www na temelju naše LDIR varijable, ali ostavio / wp-content / dio njega.

    Drugi blok jednostavno skida cijelu prethodnu stazu s naziva datoteke proslijeđene skripti tako da jednostavno dobijete naziv datoteke.

    Na primjer, ako ste imenovali skriptu up.sh i pokrenuli je s lokalnog / var / www / wp-content / plugins / direktorija na datoteci:

    up.sh myplugin.php

    To bi ljuska proširila na sljedeći način:

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

    Umjesto pokušaja stvaranja vlastite datoteke skripte koja se temelji na članku, omogućio sam vam da je preuzmete. Na taj način neće biti problema s posebnim znakovima koji ne rade ... i da, koristio sam skriptu za samu upload =)

    Preuzmite geek-uploader.sh

    Samo ga stavi negdje na svoj put, i nazovi ga što god želiš. Preimenovao sam svoj u samo "gore", tako da mogu samo upisati "up filename.txt" za učitavanje. Također zapamtite da ga otvorite i promijenite varijable na početku skripte kako bi odgovarale vašem okruženju.

    Ova skripta bi trebala raditi na svemu s * nix ljuskom i uslužnim programom scp. Koristim Ubuntu, ali bi trebao raditi na Solarisu, OS X-u, ili čak Windowsima s instaliranim Cygwinom.