Shell Script, lai augšupielādētu failu uz to pašu apakšdirektoriju uz attālā servera

Shell Script, lai augšupielādētu failu uz to pašu apakšdirektoriju uz attālā servera
Shell Script, lai augšupielādētu failu uz to pašu apakšdirektoriju uz attālā servera

Video: Shell Script, lai augšupielādētu failu uz to pašu apakšdirektoriju uz attālā servera

Video: Shell Script, lai augšupielādētu failu uz to pašu apakšdirektoriju uz attālā servera
Video: CS50 2013 - Week 9, continued - YouTube 2024, Aprīlis
Anonim

Ļoti bieži sastopams uzdevums tīmekļa izstrādātājam ir augšupielādēt vienu failu no jūsu attīstības kastes apakšdirektorijas uz to pašu apakšdirektoriju attālajā serverī. Diemžēl tas vienmēr izraisa kaitinošu manuālu procesu, kas ietver direktoriju pārslēgšanu abos serveros un lielu daudzumu atkritumu.

Tātad, es pats to izmantoju, lai rakstītu čaulas skriptu, lai to automatizētu, izmantojot scp drošai failu kopēšanai. (Svarīga piezīme: ftp ir drausmīgi nedrošs, vietā izmantojiet WinSCP)

Galvenā problēmu atrisināt bija tas, ka manai WordPress instalēšanai manā izstrādes mašīnā ir atšķirīgs bāzes katalogs, nevis instalācija manā serverī. Manā izstrādes mašīnā tas ir / var / www, un manā serverī ir kaut kas vairāk kā / var / www / howtogeek / docs /. Es nolēmu vienkārši pārvietot tos uz mainīgajiem lielumiem skripta sākumā, piemēram:

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

Ņemiet vērā, ka vietējā direktorijā (LDIR) skriptā ir pirms katra / ceļā. Tas ir tāpēc, ka vēlāk skriptā mēs to nodosim komandā sed komandā, tāpēc mums jāizvairās no šīm vērtībām. Esmu pārliecināts, ka šis ir kaut kas cits veids, bet es to nezinu.

Tālāk es izveidoju automatizēto ssh logins. Lai to izdarītu, vispirms jāuzstāda ssh keygen utilīta, piemēram:

ssh-keygen -t rsa

Tad jums nepieciešams kopēt ~ /.ssh / id_rsa.pub failu uz ~ /.ssh / authorized_keys failu uz attālā servera. Ja direktorijā ~ /.ssh jau ir izveidots attālais serveris (iespējams, vēlēsities to pārbaudīt), tad jūs varat palaist šo komandu, lai kopētu atslēgas:

cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >>.ssh/authorized_keys’

Tagad mums ir automātiski ssh logins, kas ļaus izmantot SCP lietderību bez paroles. Tagad pieņemsim apskatīt scp komandu mēs izmantosim skriptā:

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

$ 1 ir parametrs, kuru jūs pārsūtīsit uz faila nosaukuma skriptu, kuru mēģināt augšupielādēt. $ SSHSERVER un $ RDIR ir mainīgie, kurus mēs iestatīsim skripta sākumā, lai iestatītu lietotāja @ saimniekdatora nosaukumu un iepriekšējo attālo ceļu.

Pirmais bloks, kas sākas ar pwd | sed, ņem pašreizējo direktorijas ceļu un noņem no iepriekšējās ceļa daļas, kas neatbilst attālajam serverim, bet atstāj pārējo ceļu. Piemēram, ja jūs izmantojāt / var / www / wp-content / komandu, tad sed bloks izstumtu / var / www, pamatojoties uz mūsu LDIR mainīgo, bet atstājiet / wp-content / daļu no tā.

Otrā bloķēšana tikai novērš visu iepriekšējo ceļu pie faila nosaukuma, kas tiek nodots skriptam, lai jūs tiktu iegūts faila nosaukums.

Piemēram, ja jūs norādījāt skriptu up.sh un izmantojāt to no vietējā / var / www / wp-content / plugins / direktorijā failā:

up.sh myplugin.php

Tas būtu paplašinājies ar čaumalu:

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

Tā vietā, lai mēģinātu izveidot savu skripta failu, pamatojoties uz rakstu, es esmu nodrošinājis to, lai jūs varētu to lejupielādēt. Tādā veidā nebūs problēmu ar īpašām rakstzīmēm, kas nedarbojas … un jā, es izmantoju skriptu, lai augšupielādētu sevi =)

Lejupielādējiet geek-uploader.sh

Vienkārši ielieciet to kaut kur savā ceļā un nosauciet to, ko vien vēlaties. Es pārdēvēju mani tikai "uz augšu", lai es varētu vienkārši ierakstīt "up filename.txt", lai augšupielādētu. Atcerieties to arī atvērt un mainīt skripta sākumā esošos mainīgos, lai tie atbilstu jūsu videi.

Šim skriptam jādarbojas ar kaut ko ar * nix apvalku un SCP lietderību. Es izmantoju Ubuntu, bet tam vajadzētu strādāt ar Solaris, OS X vai pat Windows ar Cygwin instalēšanu.

Ieteicams: