it-swarm.com.de

Stellen Sie sicher, dass scp immer überschreibt oder ein Verzeichnis erstellt

Ich verwende scp, um ein Verzeichnis von einem Remote-Server in ein neues Verzeichnis (IE ändert nur den Namen) auf einem anderen Remote-Server zu kopieren, wie:

scp -prq server1:dir1 server2:dir2

Dies funktioniert einwandfrei, wenn dir2 auf Server2 nicht vorhanden ist. Es wird ein neues Verzeichnis namens dir2 erstellt, das alles von dir1 auf Server1 enthält.

Das Problem tritt auf, wenn dir2 bereits auf Server2 vorhanden ist (HINWEIS: Ich habe keine Möglichkeit, dies im Voraus zu wissen oder vorher auf dir2 auf Server2 zu entfernen). In dir2 erhalte ich eine Kopie von dir1 mit dem Namen dir1.

Ich bin mir sicher, dass mir etwas Grundlegendes fehlt, aber ich kann es einfach nicht herausfinden.

Jede Hilfe sehr geschätzt!

Grüße,

Giles

Okay, ich habe weniger als 10 Wiederholungen und kann nicht dazu gebracht werden, 8 Stunden zu warten. Hier ist also, was ich habe:

Hier ist ein Skript, das für mich funktioniert:

#!/bin/sh
echo "method 1"
scp -prq server1:dir1/* server2:dir2/ >/dev/null  2>&1

if [ "$?" -ne "0" ]; then
        echo "failed ... trying method 2"
        scp -prq server1:dir1 server2:dir2
fi

exit

Ich bin mir immer noch nicht sicher, wie ich das mit einem einzigen Befehl oder wenn möglich machen soll.

Cheers @mindthemonkey, manchmal kann es hilfreich sein, nur einen neuen Standpunkt zu finden.

29
Giles

Verwenden Sie diese "Punkt" -Syntax:

scp -prq server1:dir1/. server2:dir2/

Dadurch wird der Inhalt dieses Verzeichnisses und nicht das Verzeichnis selbst kopiert. Und ich glaube, es ist tragbarer als * globbing.

37
chronospoon

Normalerweise müssen Sie zur Steuerung der Verzeichniserstellung ein nachfolgendes / Verwenden, um einen vollständigen Pfad zu implizieren. Ich denke jedoch, dass das Verzeichnis dann nicht erstellt werden kann, wenn es nicht vorhanden ist:

scp -prq server1:dir1/* server2:dir2/

Dies könnte auch versteckt fehlen. Dateien aufgrund der * glob-Erweiterung (ohne etwas knifflige Shell-spezifische Arbeit )

Sie können es mit ssh und tar anders angehen.

ssh server1 "cd dir1 && tar -cf - ." | ssh server2 "( mkdir -p dir2; cd dir2 && tar -xf - )"

Dies bedeutet jedoch, dass der Datenverkehr über Ihren lokalen Computer erfolgt.

1
Matt