Ich habe einige Probleme beim Hochladen von Verzeichnissen (die andere Verzeichnisse einige Ebenen tief enthalten) mit sftp. Mir ist klar, dass ich das durch Gzippen umgehen könnte, aber ich verstehe nicht, warum das notwendig ist.
Wie auch immer, ich versuche es
sftp> put bin/
Uploading bin/ to /home/earlz/blah/bin
bin/ is not a regular file
sftp> put -r bin/
Uploading bin/ to /home/earlz/blah/bin
Couldn't canonicalise: No such file or directory
Unable to canonicalise path "/home/earlz/blah/bin"
Ich finde die letzte Fehlermeldung völlig doof. Das Verzeichnis existiert also nicht? Warum nicht das Verzeichnis erstellen?
Gibt es überhaupt ein Problem mit sftp oder sollte ich einfach scp verwenden?
sftp
ermöglichtput -r
von OpenSSH 5.4Ich weiß nicht, warum SFTP dies tut, aber Sie können nur rekursiv kopieren, wenn das Zielverzeichnis bereits vorhanden ist. Also mach das ...
quelle
-r
benötigt OpenSSH 5.4 oder höherMöglicherweise möchten Sie
rsync
stattdessen verwenden. Der Befehl dafür wäreDadurch wird alles kopiert
bin/
und auf dem Remote-Server in abgelegt/home/earlz/blah/bin/
. Als zusätzlichen Vorteil wird zunächst geprüft, ob sich die Datei auf der Remote-Seite nicht geändert hat, und wenn dies nicht der Fall ist, wird sie nicht erneut gesendet. Außerdem können Sie die Option -z hinzufügen, um sie für Sie zu komprimieren.quelle
sftp
ein Befehl und ein Protokoll ist .rsync
unterstützt dassftp
-protokoll nicht.lcd
: Ihr lokaler Ordner (mit Unterordnern)cd
: Ihr Remote-Ordnerput -r .
quelle
cd
ich habe es geschafft, mich in das Verzeichnis zu begeben, das ich hochladen wollte. Danke!Darf ich eine etwas komplizierte Antwort vorschlagen, ohne zu zippen, aber mit Teer?
Auf geht's:
Dies packt das Verzeichnis ./bin mit tar (-cf: = Datei erstellen), filename - (none, stdout) und leitet es über den ssh-Befehl an target.org (das auch eine IP sein kann) weiter, wo der Befehl steht in Anführungszeichen wird Folgendes ausgeführt: cd to blah und tar -xf (Datei extrahieren) - keine, kein Name, nur stdin.
Es ist, als ob Sie ein Paket zu Hause packen, es zur Post bringen und dann zur Arbeit fahren, wo Sie das Paket erwarten und es öffnen.
Vielleicht gibt es eine viel elegantere Lösung, die nur sftp verwendet.
quelle
tar
ist eine sehr gute Lösung, benötigt jedochssh
Anmeldeunterstützung (zusätzlichsftp
ein anderes Protokollssh
).tar
Im Gegensatz zu anderen läuft es standardmäßig rekursiv, überträgt alle speziellen Dateien (FIFO, Block- / Zeichengeräte usw.), versucht die UID / GID-Zuordnung von der Quelle auf das Zielsystem zu übersetzen und verfügt über eine traditionelle kurze Befehlszeile. (Eine Ausnahme: "Unix-Domain-Sockets" werden nicht übertragen. Aber wer braucht das?)pv
Tool auch verwenden, um die Geschwindigkeit bei langen Übertragungen zu überwachenSie können yafc (noch ein weiterer FTP / SFTP-Client) verwenden. Die
-r
Option funktioniert dort sehr gut.quelle
Sie können rsync verwenden , eine sehr leistungsstarke Alternative für scp und sftp, insbesondere beim Aktualisieren der Kopien von Computer A auf Computer B, da die nicht geänderten Dateien nicht kopiert werden. Es ist auch in der Lage, Dateien von Computer B zu entfernen, die von Computer A gelöscht wurden (natürlich nur, wenn es dazu aufgefordert wird).
beispielsweise :
Die Option -r dient zum rekursiven Kopieren von Dateien, -z aktiviert die Komprimierung während der Übertragung und -p behält die Dateiberechtigungen (Dateierstellung, -bearbeitung usw.) beim Kopieren bei, was AFAIK von scp nicht unterstützt. Viele weitere Optionen sind möglich. Lesen Sie wie gewohnt die Manpages.
Originalantwort von Karolos
quelle
Melden Sie sich mit ssh beim Remote-Server an, stellen Sie mit sftp eine Verbindung zu Ihrer Box her, und
get -r
übertragen Sie die Verzeichnisse mit dem Befehl auf den Remote-Server. Mit dem Befehl get können Sie Verzeichnisse rekursiv übertragen, ohne dass das Verzeichnis bereits erstellt wurde.quelle
SFTP-Fall:
Ich musste diese Struktur auf meinem FTP kopieren:
Das hat mein Problem gelöst:
quelle
Ich habe gerade aus dem Arch Linux Wiki erfahren, dass es möglich ist, die sftp-Freigabe mit sshfs zu mounten. Ich betreibe einen SFTP-Server mit Chroot und Jail und SSHFS funktioniert sehr gut.
sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
fusermount -u <your/local/mount/directory>
quelle