Skip to main content

Skript Shell na odovzdanie súboru do rovnakého podadresára na vzdialenom serveri

Skript Shell na odovzdanie súboru do rovnakého podadresára na vzdialenom serveri

Geoffrey Carr

Veľmi bežná úloha pre webového vývojára je odovzdanie jedného súboru z podadresára vo vašom vývojovom okne do rovnakého podadresára na vzdialenom serveri. Bohužiaľ, to vždy skončí ako rušivý manuálny proces zahŕňajúci prepínanie adresárov na oboch serveroch a zlikviduje veľa času.

Takže som si vzal na seba napísať shell skript automatizovať to pre mňa, pomocou scp pre bezpečné kopírovanie súborov. (Dôležitá strana Poznámka: ftp je strašne neistý, miesto toho použite WinSCP)

Hlavným problémom, ktorý som vyriešil, bolo, že môj WordPress nainštalovaný na vývojovom stroji má iný základný adresár ako inštalácia na mojom serveri. Na svojom vývojovom stroji je / var / www a na mojom serveri je niečo viac ako / var / www / howtogeek / docs /. Rozhodol som sa jednoducho presunúť tieto do premenných na začiatku scenára, ako je toto:

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

Všimnite si, že lokálny adresár (LDIR) v skripte má pred každým / v ceste. Je to preto, že to prenesieme do príkazu sed neskôr v skripte, takže musíme uniknúť týmto hodnotám. Som si istý, že je to niečo iné, ale o tom neviem.

Ďalej som nastavil automatické prihlásenie ssh. Aby ste to dosiahli, musíte najprv spustiť nástroj ssh keygen takto:

ssh-keygen -t rsa

Potom musíte na vzdialenom serveri skopírovať súbor ~ / .ssh / id_rsa.pub do súboru ~ / .ssh / authorized_keys. Ak je adresár ~ / .ssh už vytvorený na vzdialenom serveri (možno budete chcieť skontrolovať), môžete tento príkaz spustiť, ak chcete kopírovať tieto klávesy:

cat ~/.ssh/id_rsa.pub | ssh [email protected] ‘cat >> .ssh/authorized_keys’

Teraz máme automatické prihlásenia ssh, ktoré umožnia používať nástroj scp bez hesla. Teraz sa pozrime na príkaz scp, ktorý použijeme v skripte:

scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`

$ 1 je parameter, ktorý odovzdáte skriptu pre názov súboru, ktorý sa pokúšate odovzdať. $ SSHSERVER a $ RDIR sú premenné, ktoré nastavíme na začiatku skriptu, aby sme nastavili meno používateľa @ hostname a predchádzajúcu vzdialenú cestu.

Prvý blok, ktorý začína reťazcom pwd | sed, prechádza aktuálnou cestou adresára a odvíja od predchádzajúcej časti cesty, ktorá sa nezhoduje so vzdialeným serverom, ale zanecháva zvyšok cesty. Napríklad, ak ste boli v / var / www / wp-content / pri spustení príkazu, sed blok by vyňal / var / www na základe našej premennej LDIR, ale ponechajte / wp-content / ,

Druhý blok jednoducho zbaví celú predchádzajúcu cestu z názvu súboru preneseného do skriptu, takže dostanete len názov súboru.

Napríklad, ak ste pomenovali skript up.sh a spustili ho z lokálneho adresára / var / www / wp-content / plugins / v súbore:

up.sh myplugin.php

To by bolo rozšírené shell ako nasledovné:

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

Namiesto toho, aby ste sa pokúšali vytvoriť svoj vlastný skriptový súbor na základe článku, poskytol som vám ju na stiahnutie. Týmto spôsobom nebudú žiadne problémy so špeciálnymi znakmi, ktoré nefungujú ... a áno, použil som skript na nahrávanie =)

Stiahnuť geek-uploader.sh

Namierte to niekde vo svojej ceste a označte to, čo chcete. Premenoval som môj na "up", takže môžem jednoducho napísať "up filename.txt" na upload. Tiež si nezabudnite otvoriť ho a zmeniť premenné na začiatku skriptu tak, aby zodpovedali vášmu prostrediu.

Tento skript by mal fungovať na čokoľvek s shellom * nix a nástrojom scp. Používam Ubuntu, ale mal by pracovať na Solaris, OS X, alebo dokonca Windows so zariadením Cygwin.

Link
Plus
Send
Send
Pin