Antworten:
sftp
, Wie cp
und scp
erfordert , dass , wenn Sie einen Ordner (und dessen Inhalt, natürlich) zu kopieren, müssen Sie explizit sagen , Sie wollen die Ordner rekursiv mit der Übertragung -r
Option.
Fügen Sie also -r
den Befehl hinzu.
-r
den sftp
Befehl hinzu, wenn Sie eine Verbindung herstellen. sftp -r user@host
Couldn't canonicalise: No such file or directory
.
# sftp user@remote-host
#> get -r remote-folder
Ich kann nur vorschlagen, Sie verwenden rsync
. Es ist ein gewisser Industriestandard, wenn Dateien über sichere Verbindungen übertragen werden.
rsync -alPvz ./source_dir server.com:destination_dir
Es ist das, was ich seit Jahren benutze.
(Die -a
Option kümmert sich um Dinge wie die Verzeichnisrekursion)
-a
= Rekursion + Symbolische Verknüpfungen, Berechtigungen, Änderungszeiten, Eigentümer, Gruppe, spezielle Dateien und Gerätedateien beibehalten (letzteres erfordert Superuser-Berechtigungen); -l
= symbolische Links behalten (bereits enthalten in -a
); -P
= Fortschritt während der Übertragung anzeigen + teilweise übertragene Dateien behalten; -v
= ausführlicher Modus (scheint jedoch obligatorisch -P
zu sein, um einen seltsamen (Bug-?) protocol version mismatch
Fehler zu vermeiden ); -z
= Komprimierung der übertragenen Daten aktivieren.
-l
Switch verwendet werden muss oder nicht. Ich erinnere mich an ältere Versionen nicht enthalten -l
in -a
.
Möglicherweise können Sie auch verwenden scp
. Das allgemeine Format ist
scp -rp sourceDirName username@server:destDirName
scp
bedeutet "sichere Kopie". Die Flaggen sind
-r
in Unterverzeichnisse zurückverfolgen-p
Änderungszeiten einhaltenIch glaube, der Rest der Artikel ist selbsterklärend
Das funktioniert bei mir:
1) Verbinden Sie sich über sftp
mit dem Remote-Host
2) Wechseln Sie in das entfernte Verzeichnis, das Sie kopieren möchten. (Beispiel: CD-Musik)
3) Wechseln Sie in das lokale Verzeichnis, in das Sie Inhalte kopieren möchten. (Beispiel: lcd Desktop)
4) Setzen Sie diesen Befehl ab: get -r *
Wenn rsync
keine Option ist, würde ich als nächstes empfehlen lftp
:
lftp sftp://user@host.com/path/path/
Verwenden Sie dann den mirror
Befehl zum rekursiven Hochladen wie folgt:
mirror -R
(Beachten Sie, dass Rekursion ist die Standardeinstellung Die. -R
Ist für Reverse -. Den Spiegel Befehl Upload statt Download zu machen Versuchen Sie , --dry-run
einen Versuch zu tun , um sicherzustellen, dass es tut , was Sie erwarten.)
Oder ohne Rekursion hochladen:
mirror --no-recursion
Sie müssen cd
in die Verzeichnisse, die Sie spiegeln möchten. Funktioniert super!
Wenn Sie können, verwenden Sie sshfs . Es ist ein FUSE- Dateisystem, das auf den meisten modernen Unices verfügbar ist und mit jedem SFTP-Server funktioniert. Dies ist ein Remote-Dateisystem: Sie können Remote-Dateien (über das SFTP-Protokoll) mit den üblichen Dienstprogrammen bearbeiten.
mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point
Es ist ein bisschen kludge, aber was für mich funktioniert, ist:
ssh
diese Option, um sich beim Remote-Computer anzumeldensftp
vom Remote-Computer auf Ihrem lokalen Computerget
Befehl mit der -r
Option, um das Verzeichnis und alle seine Dateien zu verschieben.sftp> get -r data /opt/bin get: Invalid flag -r
Wenn Sie sich tatsächlich die Frage stellen, wie ich mit sftp ein Verzeichnis übertrage, dann
sftp -r user@server
Wenn Sie jedoch ein Verzeichnis übertragen, empfehle ich je nach Bedarf zwei bessere Optionen. sftp
erfordert die Anmeldung am Remote-Server in einer ssh-ähnlichen Eingabeaufforderung. Wenn Sie jedoch nur die Datei (en) benötigen, gibt es einfachere und schnellere Möglichkeiten.
Scp
Versuchen Sie für eine einmalige Übertragung zum Hochladen Folgendes:
# upload source directory to remote server
scp -rp source_dir user@server:dest
#download directory from remote server:
scp -rp user@server:source_dir dest
#specifying ssh key:
scp -rp -i ~/.ssh/key user@server:source_dir dest
#remote directory has spaces
scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest
Rsync
Wenn Sie die Verzeichnisse regelmäßig synchronisieren möchten, ist die Verwendung von rsync sinnvoller. Es führt Deltas zwischen den beiden Verzeichnissen durch und spart Übertragungszeit und Daten über die Leitung.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Hier ist eine Liste der am häufigsten verwendeten rsync-Optionen: ( von hier übernommen )
Ich hoffe, das hilft!
Sie können vom Server zu Ihrem lokalen Pfad gelangen, indem Sie
scp -rp user@server:directoryname(full path) .