web-dev-qa-db-fra.com

Comment créer un répertoire sur l'hôte distant s'il n'existe pas sans ssh-ing?

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.

52
larjudge

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.

32
Peter Mortensen

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"

$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.

24
ire_and_curses

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.

19
Matthias Wandel

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
13
Sarang

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

6
Rico Chen

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.

0
S0AndS0