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

Кроме того, что ваш макрос плохо сформирован, он бесполезен для того, что вы хотите, потому что вы вызываете create_foo при каждом вызове.

Вы можете использовать статические переменные:

void loop() {
    static Foo f1, f2;
    some_func(3, f1);
    some_func(40, f2);
}
52
задан Peter Mortensen 18 July 2012 в 05:16
поделиться

4 ответа

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

Например,

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

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

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

32
ответ дан 7 November 2019 в 09:22
поделиться

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

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

0
ответ дан 7 November 2019 в 09:22
поделиться

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

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

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

где

$1 = filename 
$2 = user@server
$3 = dir_on_server

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

24
ответ дан 7 November 2019 в 09:22
поделиться

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

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

19
ответ дан 7 November 2019 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: