Shell Script за качване на файл в същия поддиректория на отдалечен сървър
Много често срещана задача за уеб разработчик е да качи един файл от поддиректория в полето за развитие в същата поддиректория на отдалечен сървър. За съжаление, това винаги се превръща в досаден ръчен процес, включващ превключване на директории на двата сървъра, и губи много време.
Така че, аз съм взел на себе си да напиша скрипт за автоматизиране на това за мен, използвайки scp за сигурно копиране на файлове. (Важна страна Забележка: ftp е ужасно несигурна, вместо това използвайте WinSCP)
Основният проблем за решаване е, че моята WordPress инсталация на моята машина за разработка има различна базова директория от инсталацията на моя сървър. На моята машина за разработка е / var / www, а на моя сървър е нещо повече от / var / www / howtogeek / docs /. Реших да преместя тези променливи в началото на скрипта, като това:
[email protected]
RDIR = / Var / WWW / howtogeek / документи
LDIR = "\ / Var \ / WWW"
Имайте предвид, че локалната директория (LDIR) в скрипта има преди всеки / в пътя. Това е така, защото ще го прехвърлим в sed командата по-късно в скрипта, така че трябва да избягаме от тези стойности. Сигурен съм, че има някакъв друг начин за това, но аз не го знам.
След това създадох автоматизирани ssh вход. За да направите това, трябва първо да стартирате помощната програма на ssh keygen така:
ssh-keygen -t rsa
След това трябва да копирате файла ~ / .ssh / id_rsa.pub в файла ~ / .ssh / authorized_keys на отдалечения сървър. Ако директорията ~ / .ssh вече е създадена на отдалечения сървър (може да искате да проверите), можете да изпълните тази команда, за да копирате ключовете:
cat ~ / .ssh / id_rsa.pub | ssh user @ име на хоста 'cat >> .ssh / authorized_keys'
Сега имаме автоматизирани ssh имена, които ще позволят използването на помощната програма scp без парола. Сега нека разгледаме командата scp, която ще използваме в скрипта:
scp $ 1 $ SSHSERVER: $ RDIR'pwd | sed “s / $ LDIR //” '/' echo $ 1 | sed 's /.* \ t
$ 1 е параметърът, който ще преминете към скрипта за името на файла, който се опитвате да качите. $ SSHSERVER и $ RDIR са променливи, които ще поставим в началото на скрипта, за да зададем потребителското име на хост и предходния отдалечен път.
Първият блок, който започва с pwd | sed, поема текущата пътека на директорията и отделя предишната част от пътя, която не съвпада с отдалечения сървър, но оставя останалата част от пътя. Например, ако сте били в / var / www / wp-content / когато стартирахте командата, sed блокът ще премахне / var / www на базата на нашата LDIR променлива, но ще остави част / wp-content / part of.
Вторият блок просто гарантира, че ще премахнете цялата предходна пътека от името на файла, предадено на скрипта, така че просто ще получите името на файла.
Например, ако сте нарекли скрипта up.sh и го стартирахте от вашата локална / var / www / wp-content / plugins / директория във файл:
up.sh myplugin.php
Това би било разширено от черупката по следния начин:
scp myplugin.php [email protected]: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php
Вместо да се опитвате да създадете свой собствен скриптов файл на базата на статията, аз го предоставих за изтегляне. По този начин няма да има проблеми със специалните символи, които не работят ... и да, използвах скрипта, за да се кача сам =)
Изтеглете geek-uploader.sh
Просто го поставете някъде на пътя си и го кръстете каквото пожелаете. Преименувах моята на „нагоре“, така че мога просто да напиша „up filename.txt“ за качване. Също така не забравяйте да го отворите и да промените променливите в началото на скрипта, за да съответстват на вашата среда.
Този скрипт трябва да работи с всичко, което е с * nix shell и scp полезността. Използвам Ubuntu, но трябва да работи на Solaris, OS X или дори Windows с инсталиран Cygwin.