2012-07-21 3 views
9

Gibt es einen Weg zu scp alle Dateien in einem Verzeichnis rekursiv zu einem Remote-Rechner und behalten Sie ihre ursprünglichen Dateinamen, aber kopieren Sie nicht das Verzeichnis, in dem es ist?Rekursiv scp außer aktuelles Verzeichnis

dir1/file 
dir1/dir2/file2 

so würde der Inhalt von dir1 nur kopiert werden. dir1 würde nicht erstellt werden. Das Verzeichnis dir2 würde jedoch mit file2 innerhalb erstellt werden.

Ich habe versucht scp -r dir1 remote:/newfolder, aber es erstellt dir1 in der /newfolder Verzeichnis auf remote. Ich möchte nicht, dass es das Verzeichnis dir1 erstellt. Legen Sie einfach alle Dateien innerhalb von dir1 in newfolder.

Antwort

19
cd dir1 
scp -r . remote:/newfolder 

Dies vermeidet geben scp eine Chance, etwas zu tun mit dem Namen dir1 auf dem Remote-Computer. Vielleicht haben Sie auch bevorzugen:

(cd dir1; scp -r . remote:/newfolder) 

Diese Shell in seinem ursprünglichen Verzeichnis verlässt, während die gleiche Arbeit (weil es startet eine Unterschale, die die cd und scp Operationen der Fall ist).

8

Das bedeutet, die Liste der Dateien, die von der Shell Expansion dir1/* an dem entfernten Ort remote gemacht kopieren:/newfolder

scp -r dir1/* remote:/newfolder 
+0

Ich mag diese Antwort, weil es vermeidet, eine 'CD' zu machen. Wenn Ihre nächste Anweisung nach 'scp' erwartet, dass Sie sich in Ihrem ursprünglichen Verzeichnis befinden, müssen Sie noch einen weiteren Schritt machen, um 'cd' zurück zu bringen. – jreancsu

1

Sie können die Punktsyntax mit dem relativen Pfad verwenden.

scp -r dir1/. remote:/newfolder 

Wenn das Remote-Verzeichnis nicht existiert, wird es erstellt.