Velmi častým úkolem pro webového vývojáře je nahrání jediného souboru z podadresáře ve vašem vývojovém okně do stejného podadresáře na vzdáleném serveru. Bohužel, to vždy skončí jako rušivý ruční proces zahrnující přepínání adresářů na obou serverech a zbytečně mnoho času.

Takže jsem si vzal na sebe napsat skript shell, který by mi to automatizoval, a to pomocí scp pro bezpečné kopírování souborů. (Důležitá strana Poznámka: ftp je strašně nejistý, místo toho použije WinSCP)

Hlavním problémem, který jsem vyřešil, bylo to, že moje WordPress instalace na vývojovém stroji má jiný základní adresář než instalace na mém serveru. Na vývojovém stroji je / var / www a na mém serveru je něco podobného / var / www / howtogeek / docs /. Rozhodl jsem se, že je na začátku skriptu prostě přesunout na proměnné, jako je toto:

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

Všimněte si, že místní adresář (LDIR) ve skriptu má před každým / v cestě. Důvodem je to, že to uděláme později v příkazu sed do skriptu, takže musíme uniknout těmto hodnotám. Jsem si jistý, že tohle je jiný způsob, ale o tom nevím.

Dále jsem nastavil automatické přihlašování ssh. Chcete-li to provést, musíte nejprve spustit nástroj ssh keygen takto:

ssh-keygen -t rsa

Poté je třeba zkopírovat soubor ~ / .ssh / id_rsa.pub do souboru ~ / .ssh / authorized_keys na vzdáleném serveru. Pokud je adresář ~ / .ssh již vytvořen na vzdáleném serveru (pravděpodobně chcete zkontrolovat), můžete spustit tento příkaz a zkopírovat klíče:

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

Nyní máme automatické přihlašování ssh, které umožní použití nástroje scp bez hesla. Nyní se podívejme na příkaz scp, který použijeme ve skriptu:

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

$ 1 je parametr, který předáte skriptu pro název souboru, který se pokoušíte nahrát. $ SSHSERVER a $ RDIR jsou proměnné, které nastavíme na začátku skriptu, abychom nastavili jméno uživatele host @ a předchozí vzdálenou cestu.

První blok, který začíná příkazem pwd | sed, přebírá aktuální cestu k adresáři a odřízne předcházející část cesty, která neodpovídá vzdálenému serveru, ale opustí zbytek cesty. Například pokud jste byli v / var / www / wp-content / při spuštění příkazu, sed blok by odstranil / var / www na základě naší LDIR proměnné, ale ponechat / wp-content / .

Druhý blok pouze zajistí odstranění celé předchozí cesty z názvu souboru předaného skriptu, takže dostanete pouze název souboru.

Pokud jste například pojmenovali skript up.sh a spustili jej z místního adresáře / var / www / wp-content / plugins / v souboru:

up.sh myplugin.php

To by bylo rozšířeno shell jako následující:

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

Místo toho, že se pokusíte vytvořit svůj vlastní soubor skriptu na základě článku, poskytl jsem vám ho ke stažení. Tímto způsobem nebudou mít žádné problémy se speciálními znaky, které nefungují ... a ano, použil jsem skript pro upload sám =)

Stáhněte si geek-uploader.sh

Stačí to dát někam do cesty a pojmenovat to, co chcete. Přejmenoval jsem se jen na "nahoru", takže mohu jen napsat "up filename.txt" na upload. Také nezapomeňte otevřít a změnit proměnné na začátku skriptu tak, aby odpovídaly vašemu prostředí.

Tento skript by měl pracovat na všechno s shell * nix a nástrojem scp. Používám Ubuntu, ale měl by pracovat na Solarisu, OS X, nebo dokonce Windows s Cygwinem instalovaným.

Nejlepší Tipy:
Komentář: