29Jun

Shell Script pentru a încărca un fișier în același subdirector pe un server la distanță

click fraud protection

O sarcină foarte comună pentru un dezvoltator web este încărcarea unui singur fișier dintr-un subdirector pe caseta de dezvoltare în același subdirector pe un server de la distanță.Din păcate, acest lucru se termină mereu printr-un proces manual deranjant, care implică comutarea directoarelor pe ambele servere și duce la o mare cantitate de timp.

Deci, am luat-o pe mine însumi să scriu un script de shell pentru a automatiza acest lucru pentru mine, folosind scp pentru copierea sigură a fișierelor.(Important Side Notă: ftp este nesigur, utilizați WinSCP în schimb)

Principala problemă de rezolvat a fost că instalarea mea WordPress pe mașina mea de dezvoltare are un director de bază diferit de instalarea pe serverul meu. Pe mașina mea de dezvoltare este /var/ www, iar pe serverul meu este ceva mai mult ca /var/www/howtogeek/docs/.Am decis să le mișcăm doar în variabilele de la începutul scriptului, după cum urmează:

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

instagram viewer

Rețineți că directorul local( LDIR) în script are un \ înainte de fiecare / în calea. Acest lucru se datorează faptului că vom trece acest lucru într-o comandă sed mai târziu în scenariu, așa că trebuie să scăpăm de aceste valori. Sunt sigur că există o altă modalitate în jurul acestui lucru, dar nu sunt conștient de asta.

Apoi, am creat login-uri automate ssh. Pentru aceasta, trebuie să rulați mai întâi utilitarul ssh keygen astfel:

ssh-keygen -t rsa

Apoi trebuie să copiați fișierul ~ /.ssh/ id_rsa.pub la fișierul ~ /.ssh/ authorized_keys de pe serverul de la distanță.Dacă directorul ~ /. ssh este deja creat pe serverul de la distanță( poate doriți să verificați), puteți rula această comandă pentru a copia cheile deasupra:

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

Acum avem login-uri ssh automate, ceea ce va permite utilizarea utilitarului scp fara parola. Acum, să aruncăm o privire la comanda scp pe care o vom folosi în scriptul:

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

$ 1 este parametrul pe care îl veți trece la scriptul pentru numele fișierului pe care încercați să îl încărcați.$ SSHSERVER și $ RDIR sunt variabile pe care le vom seta la începutul scriptului pentru a seta numele de utilizator al utilizatorului @ și calea îndepărtată precedentă.

Primul bloc care începe cu pwd | sed trasează calea curentă a directorului și se desprinde din partea anterioară a căii care nu se potrivește cu serverul de la distanță, dar lasă restul căii. De exemplu, dacă ați fost în /var/www/ wp-content / când ați executat comanda, blocul sed ar desprinde www /var/ bazat pe variabila noastră LDIR, dar va lăsa / wp-content / parte din ea.

Cel de-al doilea bloc vă asigură că eliminați întreaga cale precedentă din numele fișierului trecut pentru script, astfel încât să obțineți numele fișierului.

De exemplu, dacă ați denumit scriptul up.sh și l-ați executat din directorul /plugins/ /var/www/ pe un fișier /plugins/ pe un fișier:

up.sh myplugin.php

Acest lucru ar fi fost extins de shell după cum urmează:

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

În loc să încercați să vă creați propriul fișier de script bazat pe articol, l-am furnizat pentru descărcare.În acest fel nu vor exista probleme cu caracterele speciale care nu funcționează. .. și da, am folosit scriptul pentru a se încărca pe sine =)

Descarcă geek-uploader.sh

Doar pune-l undeva în calea ta, și numele ei orice vrei. Am redenumit-o pe a mea doar "în sus", așa că pot scrie doar "up filename.txt" pentru a încărca. Nu uitați, de asemenea, să o deschideți și să schimbați variabilele de la începutul scriptului pentru a se potrivi mediului înconjurător.

Acest script ar trebui să funcționeze pe orice cu un shell nix și utilitarul scp. Folosesc Ubuntu, dar ar trebui să funcționeze pe Solaris, OS X, sau chiar pe Windows cu Cygwin instalat.