Как создать каталог на удаленном хосте, если он не существует без ssh-ing?


Я не уверен, если это возможно или нет. В принципе, я пишу сценарий, который позволяет мне scp файл на мой хостинг. Это пока все. Аргумент 1-это файл, а аргумент 2-это папка, в которую я хочу поместить его на удаленном сервере:

function upload {
    scp  myusername@ssh.myhost.net:
}

Как вы можете/не можете знать, если каталог, который я указываю при вызове функции, не существует, то передача не выполняется. Есть ли способ проверить, существует ли каталог в функции, а если нет, создайте оно.

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

5   51   2009-08-27 13:58:34

5 ответов:

вы можете использовать rsync.

например,

rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO

примечание о rsync:

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

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

если использование ssh неинтерактивно приемлемо, то вы можете передавать свой файл с помощью cat over ssh:

cat  | ssh  "mkdir ;cat >> /"

здесь

 = filename 
 = user@server
 = dir_on_server

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

Если вы делаете рекурсивный scp (- r), он также будет копировать каталоги. Поэтому, если вы создадите каталог с именем, которое вы хотите, на удаленном хосте локально, скопируйте файл в него, а затем рекурсивно скопируйте, каталог будет создан с файлом в нем.

немного неудобно, но это будет делать свою работу.

это двухэтапный процесс

ssh myusername@ssh.myhost.net "mkdir -p "

это гарантирует создание структуры каталогов. Затем вы копируете

scp  myusername@ssh.myhost.net:

Как насчет, например,
ssh remote_user@remote.host '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt remote_user@remote.host:/tmp/nonexist/dir