Подтвердить что ты не робот

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

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

function upload {
    scp $1 [email protected]:$2
}

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

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

4b9b3361

Ответ 1

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

Например,

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

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

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

Ответ 2

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

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

cat $1 | ssh $2 "mkdir $3;cat >> $3/$1"

где

$1 = filename 
$2 = [email protected]
$3 = dir_on_server

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

Ответ 3

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

Вид неловко, но он выполнит эту работу.

Ответ 4

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

ssh [email protected] "mkdir -p $2"

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

scp $1 [email protected]:$2

Ответ 5

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

Ответ 6

sshfs быть модным!

Пример .ssh/config

Host your-host
  HostHame example.com
  User name
  IdentitiesOnly yes
  IdentityFile ~/.ssh/private_key

Локальная настройка помимо вышеуказанной требует только целевую точку монтирования...

sudo mkdir /media/your-host
sudo chown ${USER}:${USER} /media/your-host

... после чего такие вещи, как монтирование и демонтаж, намного проще для сценария.

гора

sshfs your-host:within-home/some-dir /media/your-host

Размонтируйте

fusermount -u /media/your-host

Лучшая часть этого подхода, когда сервер позволяет это, заключается в том, что локально выполняемые сценарии могут взаимодействовать с удаленной файловой системой. Это означает, что такие вещи, как...

if ! [ -d "/media/your-host/nowhere" ]; then
  mkdir -vp "/media/your-host/nowhere"
fi

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