Skript Shell pro nahrání souboru do stejného podadresáře na vzdáleném serveru
Velmi častým úkolem webového vývojáře je nahrání jediného souboru z podadresáře ve vašem vývojovém poli do stejného podadresáře na vzdáleném serveru. Bohužel to vždy končí jako rušivý ruční proces, který zahrnuje přepínání adresářů na obou serverech a zlikviduje velké množství času.
Takže jsem si vzal na sebe napsat škrábací skript, který by mi to automatizoval, a to pomocí scp pro bezpečné kopírování souborů. (Důležitá poznámka: ftp je strašně nejistý, místo toho použije WinSCP)
Hlavní problém, který jsem vyřešil, bylo, že moje WordPress instalace na vývojovém stroji má jiný základní adresář než instalace na mém serveru. Na svém vývojovém stroji je / var / www a na mém serveru je něco podobného / var / www / howtogeek / docs /. Rozhodla jsem se, že je na začátku scénáře přesunout do proměnných, 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ě. Je to proto, ž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 kolem toho je nějaký jiný způsob, ale nevím o tom.
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 (možná byste chtěli zkontrolovat), můžete tento příkaz spustit a zkopírovat klíče:
cat ~ / .ssh / id_rsa.pub | ssh jméno uživatele @ host 'cat >> .ssh / authorized_keys'
Nyní máme automatické přihlašovací 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 @ hostname a předchozí vzdálená cesta.
První blok, který začíná pwd | sed, přebírá aktuální cestu k adresáři a odtrhuje předcházející část cesty, která neodpovídá vzdálenému serveru, ale zbytek cesty opouští. 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 jste 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
Namísto pokusu o vytvoření vlastního skriptu založeného na článku jsem vám ji poskytl, abyste si ho stáhli. Tímto způsobem nebudou mít žádné problémy se speciálními znaky, které nefungují ... a ano, použil jsem skript pro nahrávání =)
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. Nezapomeňte ji otevřít a změnit proměnné na začátku skriptu tak, aby odpovídalo vašemu prostředí.
Tento skript by měl fungovat na všechno s shell * nix a utilitou scp. Používám Ubuntu, ale mělo by pracovat na Solarisu, OS X, nebo dokonce Windows s Cygwinem instalovaným.