En svært vanlig oppgave for en webutvikler er å laste opp en enkelt fil fra en underkatalog i utviklingsboksen til samme underkatalog på en ekstern server. Dessverre slutter dette alltid å være en irriterende manuell prosess som involverer bytte av kataloger på begge serverne, og spilder mye tid.
Så, jeg har tatt det på meg selv for å skrive et skallskript for å automatisere dette for meg, ved hjelp av scp for sikker filkopiering. (Viktig side Merk: ftp er forferdelig usikkert, bruk WinSCP i stedet)
Hovedproblemet med å løse var at min WordPress installer på min utviklingsmaskin har en annen base katalog enn installasjonen på min server. På min utviklingsmaskin er det / var / www, og på min server er noe mer som / var / www / howtogeek / docs /. Jeg bestemte meg for å bare flytte dem til variabler i begynnelsen av manuset, slik:
[email protected] RDIR=/var/www/howtogeek/docs LDIR=’/var/www’
Merk at den lokale katalogen (LDIR) i skriptet har en før hver / i banen. Dette skyldes at vi skal sende dette inn i en sed-kommando senere i skriptet, så vi må unnslippe disse verdiene. Jeg er sikker på at det er en annen vei rundt dette, men jeg er ikke klar over det.
Deretter setter jeg opp automatiserte ssh pålogginger. For å gjøre dette må du først kjøre ssh keygen verktøyet slik:
ssh-keygen -t rsa
Da må du kopiere filen ~ /.ssh / id_rsa.pub til ~ /.ssh / authorized_keys-filen på den eksterne serveren. Hvis ~ /.ssh-katalogen allerede er opprettet på den eksterne serveren (vil kanskje sjekke), kan du kjøre denne kommandoen for å kopiere tastene over:
cat ~/.ssh/id_rsa.pub | ssh user@hostname ‘cat >>.ssh/authorized_keys’
Nå har vi automatiserte ssh pålogginger, som gjør det mulig å bruke scp-verktøyet uten et passord. La oss nå se på scp-kommandoen vi skal bruke i skriptet:
scp $1 $SSHSERVER:$RDIR`pwd|sed “s/${LDIR}//”`/`echo $1|sed ‘s/.*///’`
$ 1 er parameteren du vil passere til skriptet for filnavnet du prøver å laste opp. $ SSHSERVER og $ RDIR er variabler vi vil sette i begynnelsen av skriptet for å angi bruker @ vertsnavnet og den foregående fjernbanen.
Den første blokken som starter med pwd | sed tar den nåværende katalogbanen og strimlene av den forrige delen av banen som ikke samsvarer med den eksterne serveren, men etterlater resten av banen. Hvis du for eksempel var i / var / www / wp-innhold / når du kjørte kommandoen, ville sed-blokken stripe av / var / www basert på LDIR-variabelen, men la / wp-innholdet / delen av det.
Den andre blokken sørger bare for at du fjerner hele den forrige banen fra filnavnet som passerer til skriptet, slik at du bare får filnavnet.
Hvis du for eksempel kalt scriptet up.sh og kjørte det fra ditt lokale / var / www / wp-innhold / plugins / katalog på en fil:
up.sh myplugin.php
Dette ville ha blitt utvidet av skallet som følgende:
scp myplugin.php [email protected]:/var/www/howtogeek/docs/wp-content/plugins/myplugin.php
I stedet for å prøve å lage din egen skriptfil basert på artikkelen, har jeg gitt det for deg å laste ned. På den måten vil det ikke være noen problemer med spesialtegn som ikke virker … og ja, jeg brukte skriptet til å laste opp seg selv =)
Last ned geek-uploader.sh
Bare sett det et sted i veien din, og nev det som du vil. Jeg omdøpte meg til bare "opp", så jeg kan bare skrive "opp filnavn.txt" for å laste opp. Husk også å åpne den og endre variablene i begynnelsen av skriptet for å matche miljøet ditt.
Dette skriptet skal fungere på alt med et * nix-skall og scp-verktøyet. Jeg bruker Ubuntu, men det skal fungere på Solaris, OS X, eller til og med Windows med Cygwin installert.