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?

haziz
quelle

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.

Kevin
quelle
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)

Polemon
quelle
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

Bina Ramamurthy
quelle
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 *

Don Karon
quelle
4

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

lftp sftp://[email protected]/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!

Banago
quelle
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
Gilles 'SO - hör auf böse zu sein'
quelle
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.
Matthew Greene
quelle
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!

Dan Williams
quelle
0

Sie können vom Server zu Ihrem lokalen Pfad gelangen, indem Sie

scp -rp user@server:directoryname(full path) .
user368621
quelle
Fügt dies neuen Informationen zu den bereits geposteten Antworten hinzu?
41754
Dies scheint größtenteils das Gleiche zu sein wie die Verwendung von SFTP zum Übertragen eines Verzeichnisses?
Kusalananda