29Jun

Shell-skript för att ladda upp en fil till samma underkatalog på en fjärrserver

click fraud protection

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 \ \ 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.

instagram viewer

Därefter inrättade jag automatiserade ssh-loggar. 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-filen på fjärrservern. Om katalogen ~ /. ssh redan är skapad på fjärrservern( kanske vill kolla), kan du köra kommandot för att kopiera nycklarna över:

katt ~ /.ssh/ id_rsa.pub |ssh-användare @ värdnamn 'cat & gt; & gt;.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 använder i skriptet:

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

$ 1 är parametern 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 lossa /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 din lokala /var/www/ wp-innehåll /plugins/-katalog på en fil:

up.sh myplugin.php

Detta skulle ha utvidgats av skalet som följande:

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

I stället för att försöka skapa en egen skriptfil baserad på artikeln har jag tillhandahållit det för att du ska 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

Lägg bara det 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.