Shell Script для загрузки файла в тот же подкаталог на удаленном сервере

Очень распространенная задача для веб-разработчика – выгрузка одного файла из подкаталога вашего блока разработки в тот же подкаталог на удаленном сервере. К сожалению, это всегда заканчивается раздражающим ручным процессом, включающим переключение каталогов на обоих серверах, и тратит много времени.

Итак, я взял на себя ответственность написать сценарий оболочки, чтобы автоматизировать это для меня, используя scp для безопасного копирования файлов. (Важное примечание: ftp ужасно небезопасен, вместо этого используйте WinSCP)

Основная проблема, которую нужно было решить, заключалась в том, что моя установка WordPress на моей машине для разработки имеет другую базовую директорию, чем установка на моем сервере. На моей машине разработки это/var/www, а на моем сервере это что-то более похожее на/var/www/howtogeek/docs /. Я решил просто переместить их в переменные в начале скрипта, например так:

SSHSERVER=thegeek@hostname.com
RDIR =/вар/WWW/howtogeek/документы
LDIR =»\/вар \/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 @ hostname ‘cat >> .ssh/authorized_keys’

Теперь у нас есть автоматические ssh логины, которые позволят использовать утилиту scp без пароля. Теперь давайте посмотрим на команду scp, которую мы будем использовать в скрипте:

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

$ 1 – это параметр, который вы передадите в скрипт для имени файла, которое вы пытаетесь загрузить. $ SSHSERVER и $ RDIR – это переменные, которые мы установим в начале скрипта, чтобы задать user @ hostname и предыдущий удаленный путь.

Первый блок, который начинается с pwd | sed, берет текущий путь к каталогу и удаляет предыдущую часть пути, которая не соответствует удаленному серверу, но оставляет остальную часть пути. Например, если вы находились в/var/www/wp-content/при запуске команды, блок sed удалил бы/var/www на основе нашей переменной LDIR, но оставил бы/wp-content/ее часть ,

Второй блок просто убирает весь предыдущий путь из имени файла, переданного в скрипт, так что вы просто получаете имя файла.

Например, если вы назвали скрипт up.sh и запустили его из локального каталога/var/www/wp-content/plugins/в файле:

up.sh myplugin.php

Это было бы расширено оболочкой следующим образом:

scp myplugin.php thegeek@hostname.com: /var/www/howtogeek/docs/wp-content/plugins/myplugin.php

Вместо того, чтобы пытаться создать свой собственный файл сценария на основе статьи, я предоставил его для загрузки. Таким образом, не будет никаких проблем с неработающими спецсимволами … и да, я использовал скрипт для загрузки самого себя =)

Скачать geek-uploader.sh

Просто поместите это где-нибудь на своем пути и назовите как хотите. Я переименовал мой в «up», так что я могу просто набрать «up filename.txt» для загрузки. Также не забудьте открыть его и изменить переменные в начале скрипта, чтобы они соответствовали вашей среде.

Этот скрипт должен работать на чем угодно с оболочкой * nix и утилитой scp. Я использую Ubuntu, но он должен работать на Solaris, OS X или даже Windows с установленным Cygwin.

Оцените статью
TutoryBird.Ru
Добавить комментарий