Verwenden Sie SFTP, um ein Verzeichnis zu übertragen?


50

Wenn ich versuche, mit sftp ein Verzeichnis mit Dateien zu übertragen, erhalte ich eine Fehlermeldung:

skipping non-regular file directory_name

Das Verzeichnis enthält einige Dateien und zwei Unterverzeichnisse.

Was mache ich falsch?

Antworten:


48

sftp, Wie cpund scperfordert , 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 -rOption.

Fügen Sie also -rden Befehl hinzu.


2
-r Nach dem Put-Befehl? Ich erhalte die Fehlermeldung "put: Invalid flag -r". Das Hinzufügen zum ursprünglichen sftp-Befehl funktioniert ebenfalls nicht.
Haziz

5
Fügen Sie -rden sftpBefehl hinzu, wenn Sie eine Verbindung herstellen. sftp -r user@host
Kevin

1
@ Kevin Ich erhalte die folgende Fehlermeldung "SFTP: Unbekannte Option - R"
Amatya

2
Hüten Sie sich vor , dass es ein ziemlich lange Stehen Fehler in OpenSSHs SFTP: wenn auf einen Remote - Server rekursiv ein Verzeichnis zu kopieren, muss das Verzeichnis selbst existiert bereits auf dem Zielserver andernfalls wird die Übertragung mit einer nicht-expliziten Fehlermeldung fehlschlagen: Couldn't canonicalise: No such file or directory.
WhiteWinterWolf

5
sollte # sftp user@remote-host #> get -r remote-folder
ungefähr

21

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 -aOption kümmert sich um Dinge wie die Verzeichnisrekursion)


3
Einige Erläuterungen zu den genannten Parametern: -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 -Pzu sein, um einen seltsamen (Bug-?) protocol version mismatchFehler zu vermeiden ); -z= Komprimierung der übertragenen Daten aktivieren.
WhiteWinterWolf

@WhiteWinterWolf es scheint versionsabhängig zu sein, ob der -lSwitch verwendet werden muss oder nicht. Ich erinnere mich an ältere Versionen nicht enthalten -lin -a.
Polemon

5

Möglicherweise können Sie auch verwenden scp. Das allgemeine Format ist

scp -rp sourceDirName username@server:destDirName

scpbedeutet "sichere Kopie". Die Flaggen sind

  • -r in Unterverzeichnisse zurückverfolgen
  • -p Änderungszeiten einhalten

Ich glaube, der Rest der Artikel ist selbsterklärend


und scp -rp -P <port> .... bei Verwendung eines nicht standardmäßigen Ports
Pancho

4

Das funktioniert bei mir:

1) Verbinden Sie sich über sftpmit 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 *


4

Wenn rsynckeine Option ist, würde ich als nächstes empfehlen lftp:

lftp sftp://user@host.com/path/path/

Verwenden Sie dann den mirrorBefehl zum rekursiven Hochladen wie folgt:

mirror -R

(Beachten Sie, dass Rekursion ist die Standardeinstellung Die. -RIst für Reverse -. Den Spiegel Befehl Upload statt Download zu machen Versuchen Sie , --dry-runeinen Versuch zu tun , um sicherzustellen, dass es tut , was Sie erwarten.)

Oder ohne Rekursion hochladen:

mirror --no-recursion

Sie müssen cdin die Verzeichnisse, die Sie spiegeln möchten. Funktioniert super!


2

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

0

Es ist ein bisschen kludge, aber was für mich funktioniert, ist:

  1. Verwenden Sie sshdiese Option, um sich beim Remote-Computer anzumelden
  2. Verwendung sftpvom Remote-Computer auf Ihrem lokalen Computer
  3. Verwenden Sie dann den getBefehl mit der -rOption, um das Verzeichnis und alle seine Dateien zu verschieben.

1
Arbeite nicht mit -rsftp> get -r data /opt/bin get: Invalid flag -r
Skynet

0

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. sftperfordert 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 )

  • --delete - löscht Dateien, die auf dem Absender (System) nicht existieren
  • -v - ausführlich (-vv liefert detailliertere Informationen)
  • -e "ssh options" - spezifiziert den ssh als Remote-Shell
  • -a - Archivierungsmodus - behält Berechtigungen (Eigentümer, Gruppen), Zeiten, symbolische Links und Geräte bei
  • -r - In Verzeichnisse rekursieren
  • -z - Komprimiert Dateidaten während der Übertragung
  • --exclude 'Foldername' - schließt den entsprechenden Ordner von der Übertragung aus
  • -P - Fortschritt während der Übertragung anzeigen

Ich hoffe, das hilft!


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.