En mycket vanlig uppgift för en webbutvecklare är att ladda upp en enda fil från en underkatalog i din utvecklingsbox till samma underkatalog på en fjärrserver. Tyvärr slutar det alltid att vara en irriterande manuell process med att byta kataloger på båda servrarna och slösa mycket tid.

Så jag har tagit det på mig själv för att skriva ett skalskript för att automatisera detta för mig, med hjälp av scp för säker filkopiering. (Viktigt sidotal: ftp är hemskt osäkert, använd WinSCP istället)

Det största problemet att lösa var att min WordPress-installering på min utvecklingsmaskin har en annan baskatalog än installationen på min server. På min utvecklingsmaskin är det / var / www, och på min server är något mer som / var / www / howtogeek / docs /. Jag bestämde mig för att bara flytta dem till variabler i början av manuset, så här:

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

Observera att den lokala katalogen (LDIR) i skriptet har en före varje / i sökvägen. Detta beror på att vi kommer att vidarebefordra detta till ett sed-kommando senare i manuset, så vi måste fly dessa värden. Jag är säker på att det finns något annat sätt härom, men jag är inte medveten om det.

Därefter inrättar jag automatiska ssh-inloggningar. För att göra detta måste du först köra ssh keygen verktyget som så:

ssh-keygen -t rsa

Då måste du kopiera filen ~ / .ssh / id_rsa.pub till ~ / .ssh / authorized_keys på fjärrservern. Om katalogen ~ / .ssh redan är skapad på fjärrservern (kanske vill kontrollera) kan du köra kommandot för att kopiera nycklarna över:

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

Nu har vi automatiserade ssh-inloggningar, vilket gör det möjligt att använda scp-verktyget utan lösenord. Låt oss nu titta på det SCP-kommando som vi ska använda i manuset:

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

$ 1 är den parameter som du skickar till skriptet för filnamnet du försöker ladda upp. $ SSHSERVER och $ RDIR är variabler som vi ställer in i början av manuset för att ställa in användarnamnet @ värdnamn och föregående fjärrväg.

Det första blocket som börjar med pwd | sed tar den aktuella katalogvägen och remsor av den föregående delen av sökvägen som inte matchar fjärrservern, men lämnar resten av sökvägen. Om du till exempel var i / var / www / wp-innehåll / när du körde kommandot, skulle sed-blocket avbryta / var / www baserat på vår LDIR-variabel, men lämna / wp-innehållet / del av det .

Det andra blocket gör det bara att ta bort hela föregående sökväg från filnamnet som passerat till skriptet så att du bara får filnamnet.

Om du till exempel namngav scriptet up.sh och sprang det från ditt lokala / var / www / wp-innehåll / plugins / directory i en fil:

up.sh myplugin.php

Detta skulle ha utvidgats av skalet som följande:

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

Istället för att försöka skapa din egen skriptfil baserat på artikeln, har jag gett det för dig att ladda ner. På så sätt kommer det inte att finnas några problem med specialtecken som inte fungerar ... och ja, jag använde manuset för att ladda upp sig själv =)

Hämta geek-uploader.sh

Ställ det bara någonstans i din väg och namnge det du vill ha. Jag bytte mig till bara "upp", så jag kan bara skriva "upp filename.txt" för att ladda upp. Kom också ihåg att öppna den och ändra variablerna i början av manuset för att matcha din miljö.

Detta skript borde fungera på något med ett * nix-skal och scp-verktyget. Jag använder Ubuntu, men det borde fungera på Solaris, OS X, eller till och med Windows med Cygwin installerat.

Top Tips:
Kommentarer: