Je ne sais pas si c'est possible ou non. Fondamentalement, j'écris un script qui me permet de scp un fichier vers mon hébergement. C'est tout pour l'instant. L'argument 1 est le fichier et l'argument 2 est le dossier dans lequel je veux qu'il soit placé sur le serveur distant:
function upload {
scp $1 [email protected]:$2
}
Comme vous le savez peut-être/si le répertoire que je spécifie lorsque j'appelle la fonction n'existe pas, le transfert échoue. Existe-t-il un moyen de vérifier si le répertoire existe dans la fonction et si ce n'est pas le cas, créez-le.
Je préférerais ne pas avoir à ssh à chaque fois et créer le répertoire, mais si je n'ai pas le choix, je n'ai pas le choix.
Vous pouvez utiliser rsync.
Par exemple,
rsync -ave ssh fileToCopy ssh.myhost.net:/some/nonExisting/dirToCopyTO
Remarque sur rsync:
rsync est un logiciel utilitaire et un protocole réseau pour Unix qui synchronise les fichiers et les répertoires d'un emplacement à un autre tout en minimisant le transfert de données en utilisant l'encodage delta le cas échéant en utilisant l'algorithme rsync qui est plus rapide que les autres outils.
Je suppose que vous voulez dire que vous ne voulez pas vous connecter de manière interactive et créer des répertoires à la main, plutôt que de ne pas utiliser ssh
, car vous avez toujours besoin d'un mot de passe ou d'une clé publique avec scp
.
Si l'utilisation de ssh de manière non interactive est acceptable, vous pouvez alors diffuser votre fichier en utilisant cat
sur ssh
:
cat $1 | ssh $2 "mkdir $3;cat >> $3/$1"
où
$1 = filename
$2 = user@server
$3 = dir_on_server
Si le répertoire existe déjà, mkdir
se plaint mais le fichier est toujours copié. Le répertoire existant ne sera pas écrasé. Si le répertoire n'existe pas, mkdir
le créera.
Si vous faites un scp récursif (-r), il copiera également les répertoires. Donc, si vous créez localement un répertoire du nom que vous désirez sur l'hôte distant, copiez le fichier dedans, puis copiez récursivement, le répertoire sera créé, avec le fichier dedans.
Un peu maladroit, mais ça ferait l'affaire.
Il s'agit d'un processus en deux étapes
ssh [email protected] "mkdir -p $2"
Cela garantit que la structure du répertoire est créée. Ensuite, vous copiez
scp $1 [email protected]:$2
Que diriez-vous, par exemple,ssh [email protected] '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt [email protected]:/tmp/nonexist/dir
sshfs
soyez fantaisiste!
Exemple .ssh/config
Host your-Host
HostHame example.com
User name
IdentitiesOnly yes
IdentityFile ~/.ssh/private_key
La configuration locale en dehors de ce qui précède ne nécessite qu'un point de montage cible ...
Sudo mkdir /media/your-Host
Sudo chown ${USER}:${USER} /media/your-Host
... après quoi des choses comme le montage et le démontage sont beaucoup plus simples à écrire.
Monter
sshfs your-Host:within-home/some-dir /media/your-Host
Démonter
fusermount -u /media/your-Host
La meilleure partie de cette approche, lorsqu'un serveur le permet, est que les scripts exécutés localement peuvent interagir avec le système de fichiers distant. Cela signifie que des choses comme ...
if ! [ -d "/media/your-Host/nowhere" ]; then
mkdir -vp "/media/your-Host/nowhere"
fi
... deviennent possibles parmi de nombreuses autres astuces qui peuvent être réalisées via de telles magies de montage.