Linux

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

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

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

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

SSHSERVER=thegeek@hostname.com
RDIR = / вар / WWW / / документы
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//docs/wp-content/plugins/myplugin.php

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

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

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

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

Похожие посты
Linux

8 лучших окружений рабочего стола Linux

AndroidIphone и ipadLinuxWindows

Окончательное руководство по включению темного режима везде

LinuxКак сделать

Что такое Swappiness в Linux? (и как это изменить)

LinuxКак сделать

Как использовать команду ls для вывода списка файлов и каталогов в Linux