Кроме того, что ваш макрос плохо сформирован, он бесполезен для того, что вы хотите, потому что вы вызываете create_foo
при каждом вызове.
Вы можете использовать статические переменные:
void loop() {
static Foo f1, f2;
some_func(3, f1);
some_func(40, f2);
}
Вы можете использовать rsync
.
Например,
rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO
Примечание о rsync
:
rsync
- это служебное программное обеспечение и сетевой протокол для Unix, который синхронизирует файлы и каталоги из одного места в другое. Он минимизирует объем передаваемых данных за счет использования дельта-кодирования, когда это целесообразно, с использованием алгоритма rsync, который быстрее, чем другие инструменты.
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
... становятся возможными среди многих других приемов, которые могут быть формованы через такое волшебство монтирования.
Я предполагаю, что вы имеете в виду, что не хотите интерактивно входить в систему и создавать каталоги вручную, а не хотите вообще избегать использования 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
создаст его.
Если вы выполните рекурсивный scp (-r), он также скопирует каталоги. Поэтому, если вы создаете каталог с желаемым именем на удаленном хосте локально, скопируете в него файл, а затем рекурсивно скопируете, будет создан каталог с файлом в нем.
Это немного неудобно, но это будет сделай свою работу.