Как создать каталог на удаленном хосте, если он не существует без ssh-in?
Я не уверен, возможно ли это или нет. В принципе, я пишу script, который позволяет мне scp файл на мой хостинг. Это до сих пор. Аргумент 1 - это файл, а аргумент 2 - это папка, которую я хочу, чтобы она была размещена на удаленном сервере:
function upload {
scp $1 [email protected]:$2
}
Как вы можете/не знать, если каталог, который я указываю при вызове функции, не существует, то передача не выполняется. Есть ли способ проверить, существует ли каталог в функции, а если нет, создайте его.
Я бы предпочел не иметь ssh в каждый раз и создавать каталог, но если у меня нет выбора, тогда у меня нет выбора.
Ответы
Ответ 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
... стало возможным среди многих других трюков, которые могут быть выполнены с помощью такой магии монтажа.