29Jun

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

click fraud protection

Vrlo uobičajen zadatak za razvojnog programera web stranice je prijenos jedne datoteke iz poddirektorij na vašem razvojnom okviru u isti poddirektorij na udaljenom poslužitelju. Nažalost, ovo uvijek završava kao neugodan ručni postupak koji uključuje prebacivanje direktorija na oba poslužitelja i gubi veliku količinu vremena.

Dakle, uzeo sam na sebe napisati skriptu ljuske kako bih automatizirala ovo za mene, koristeći scp za sigurno kopiranje datoteka.(Važno Side Napomena: ftp je užasno nesiguran, koristite WinSCP umjesto)

Glavni problem za rješavanje je da moj WordPress instalirati na moj razvojni stroj ima drugačiji bazu katalog od instalacije na moj poslužitelj. Na mom stroju za razvoj je /var/ www, a na mom poslužitelju nešto je više /var/www/howtogeek/docs/.Odlučio sam ih premjestiti u varijable na početku skripte, kao što je ovaj:

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

Imajte na umu da lokalni direktorij( LDIR) u skripti ima \ prije svake / na putu. To je zato što ćemo ovo kasnije predati u naredbu skripta, stoga moramo izbjeći te vrijednosti. Siguran sam da postoji neki drugi način oko ovoga, ali nisam svjestan toga.

instagram viewer

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

ssh-keygen -t rsa

Tada morate kopirati ~ /.ssh/ id_rsa.pub datoteku na ~ /.ssh/ authorized_keys datoteku na udaljenom poslužitelju. Ako je ~ /. ssh direktorij već stvoren na udaljenom poslužitelju( možda želite provjeriti), možete pokrenuti ovu naredbu za kopiranje tipki preko:

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

Sada imamo automatizirane sshove prijave, koje će omogućiti upotrebu skp programa bez lozinke. Pogledajmo sada scp naredbu koju ćemo koristiti u skripti:

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

$ 1 je parametar koji ćete proslijediti na skriptu za naziv datoteke koji pokušavate prenijeti.$ SSHSERVER i $ RDIR su varijable koje ćemo postaviti na početku skripte da postavimo korisničko ime @ i prethodni udaljeni put.

Prvi blok koji počinje s pwd | sed uzima trenutni put direktorija i uklanja prethodni dio puta koji ne odgovara udaljenom poslužitelju, ali ostavlja ostatak puta. Na primjer, ako ste bili u /var/www/ wp-sadržaju / kada ste pokrenuli naredbu, sed-blok blokira /var/ www na temelju naše LDIR varijable, ali ostavite / wp-sadržaj / dio.

Drugi blok samo osigurava uklanjanje cijele prethodne staze od filename koji se prenosi na skriptu tako da jednostavno dobijete naziv datoteke.

Na primjer, ako ste nazvali skriptu up.sh i pokrenuli ga s lokalnog /plugins/ wp-sadržaja /plugins/ direktorija na datoteci:

up.sh myplugin.php

To bi se proširila na ljusku kao sljedeće:

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

Umjesto da pokušavate stvoriti vlastitu skriptnu datoteku na temelju članka, predao sam vam da preuzmete. Na taj način neće biti bilo kakvih problema s posebnim likovima koji ne rade. .. i da, koristio sam skriptu za upload samog =)

Preuzmite geek-uploader.sh

Stavite ga negdje na put i imenite ga što god želite. Preimenovala sam samo na "gore", tako da mogu upisati "up filename.txt" za upload. Također zapamtite da je otvorite i promijenite varijable na početku skripte kako bi odgovarale vašem okruženju.

Ova skripta treba raditi na bilo čemu s * nix shell i scp programom. Koristim Ubuntu, ali to bi trebalo raditi na Solarisu, OS X-u ili čak Windowsu s Cygwin instaliranim.