Ich verwende scp, um ein Verzeichnis von einem Remote-Server in ein neues Verzeichnis (IE, das nur den Namen ändert) auf einem anderen Remote-Server zu kopieren:
scp -prq server1:dir1 server2:dir2
Dies funktioniert einwandfrei, wenn dir2 nicht auf server2 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 dir2 zuvor auf server2 zu entfernen) - was passiert, ist, dass ich eine Kopie von dir1 mit dem Namen dir1 in dir2 erhalte.
Ich bin sicher, dass es etwas Grundlegendes gibt, das mir 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 gezwungen werden, 8 Stunden zu warten.
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, einen neuen Standpunkt einzunehmen.
cd dir2
.Antworten:
Verwenden Sie diese "Punkt" -Syntax:
Dadurch wird der Inhalt dieses Verzeichnisses und nicht das Verzeichnis selbst kopiert. Und ich glaube, es ist portabler als das
*
Herumtollen.quelle
scp: error: unexpected filename: .
Normalerweise müssen Sie zur Steuerung der Verzeichniserstellung ein Trailing verwenden
/
, um einen vollständigen Pfad anzugeben, aber ich denke, dass das Verzeichnis dann nicht erstellt werden kann, wenn es nicht vorhanden ist:Dies könnte auch versteckt verpassen. Dateien aufgrund der * glob-Erweiterung (ohne knifflige Shell-spezifische Arbeit )
Man kann es mit
ssh
und anders angehentar
.Dies bedeutet jedoch, dass der Datenverkehr über Ihren lokalen Computer erfolgt.
quelle