Wie erstelle ich ein Verzeichnis auf dem Remote-Host, wenn es nicht ohne SSH-ing existiert?

StackOverflow https://stackoverflow.com/questions/1340048

  •  20-09-2019
  •  | 
  •  

Frage

Ich bin mir nicht sicher, ob dies möglich ist oder nicht. Grundsätzlich schreibe ich ein Skript, das es mir ermöglicht SCP Eine Datei zu meinem Hosting. Das ist es so weit. Argument 1 ist die Datei und das Argument 2 ist der Ordner, den ich auf dem Remote -Server platzieren soll:

function upload {
    scp $1 myusername@ssh.myhost.net:$2
}

Wie Sie vielleicht wissen/nicht wissen, wenn das Verzeichnis, das ich angibt, wenn ich die Funktion aufrufe, nicht vorhanden ist, schlägt die Übertragung fehl. Gibt es eine Möglichkeit zu überprüfen, ob das Verzeichnis in der Funktion vorhanden ist und ob dies nicht der Fall ist, erstellen Sie es.

Ich würde es vorziehen, nicht jedes Mal SSH zu haben und das Verzeichnis zu erstellen, aber wenn ich keine Wahl habe, habe ich keine Wahl.

War es hilfreich?

Lösung

Sie können RSYNC verwenden.

Zum Beispiel,

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

Hinweis zu RSYNC:

RSYNC ist Utility -Software und Netzwerkprotokoll für UNIX, das Dateien und Verzeichnisse von einem Speicherort zu einem anderen synchronisiert und gleichzeitig die Datenübertragung minimiert, indem sie bei Bedarf mit dem RSYNC -Algorithmus, der schneller als andere Tools ist, verwendet wird.

Andere Tipps

Ich nehme an, Sie meinen, Sie möchten sich nicht interaktiv anmelden und Verzeichnisse von Hand erstellen, anstatt dass Sie es vermeiden möchten ssh Insgesamt, da Sie noch ein Passwort oder einen öffentlichen Schlüssel mit benötigen scp.

Wenn die Verwendung von SSH nicht interaktiv akzeptabel verwendet wird, können Sie Ihre Datei mithilfe der Datei streamen cat Über ssh:

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

wo

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

Wenn das Verzeichnis bereits existiert, mkdir beschwert sich, aber die Datei wird immer noch kopiert. Das bestehende Verzeichnis wird nicht überschrieben. Wenn das Verzeichnis nicht existiert, mkdir wird es erstellen.

Wenn Sie einen rekursiven SCP (-R) durchführen, kopiert es auch Verzeichnisse. Wenn Sie also ein Verzeichnis des Namens erstellen, den Sie auf dem Remote -Host lokal gewünscht haben, kopieren Sie die Datei in sie und kopieren Sie dann rekursiv, das Verzeichnis wird mit der Datei erstellt.

Irgendwie unangenehm, aber es würde den Job machen.

Dies ist ein zweistufiger Prozess

ssh myusername@ssh.myhost.net "mkdir -p $2"

Dies stellt sicher, dass die Verzeichnisstruktur erstellt wird. Dann kopieren Sie

scp $1 myusername@ssh.myhost.net:$2

Wie wäre es zum Beispiel, zum Beispiel,
ssh remote_user@remote.host '[ -d /tmp/nonexist/dir ] || mkdir -p /tmp/nonexist/dir ]'; scp test.txt remote_user@remote.host:/tmp/nonexist/dir

sshfs sei modisch!

Beispiel .ssh/config

Host your-host
  HostHame example.com
  User name
  IdentitiesOnly yes
  IdentityFile ~/.ssh/private_key

Lokale Setup abgesehen von oben erfordert nur a Ziel Einhängepunkt...

sudo mkdir /media/your-host
sudo chown ${USER}:${USER} /media/your-host

... danach sind Dinge wie Montage und Unmontage weitaus einfacher zu Skript.

Montieren

sshfs your-host:within-home/some-dir /media/your-host

Unmontal

fusermount -u /media/your-host

Das Beste an diesem Ansatz, wenn ein Server dies zulässt, ist, dass lokal ausgeführte Skripte mit dem Remotedateisystem interagieren können. Das heißt, dass Dinge wie ...

if ! [ -d "/media/your-host/nowhere" ]; then
  mkdir -vp "/media/your-host/nowhere"
fi

... werden unter vielen anderen Tricks möglich, die über solche Montagemagien vorgebaut werden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top