Mam problemy z przesyłaniem przez sftp katalogów (które zawierają inne katalogi kilka poziomów głębokości). Zdaję sobie sprawę, że mogłem obejść to przez gzipowanie, ale nie rozumiem, dlaczego jest to konieczne.
W każdym razie próbuję
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"
Myślę, że ostatni komunikat o błędzie jest całkowicie głupi. Więc katalog nie istnieje? Dlaczego nie stworzyć katalogu?
Czy jest jakiś problem związany z sftp, czy powinienem po prostu użyć scp?
sftp
zezwalaput -r
na OpenSSH 5.4Nie wiem, dlaczego sftp to robi, ale możesz kopiować rekurencyjnie tylko wtedy, gdy katalog docelowy już istnieje. Więc zrób to ...
źródło
-r
wymaga OpenSSH 5.4 lub nowszegoZamiast tego możesz być zainteresowany
rsync
. Polecenie to byłobySpowoduje to skopiowanie wszystkiego
bin/
i umieszczenie go na zdalnym serwerze w/home/earlz/blah/bin/
. Jako dodatkową korzyść, najpierw sprawdzi, czy plik po stronie zdalnej nie zmienił się, a jeśli nie, nie wyśle go ponownie. Dodatkowo możesz dodać opcję -z, która skompresuje ją za Ciebie.źródło
sftp
jest to polecenie i protokół .rsync
nie obsługujesftp
-protocol.lcd
: twój folder lokalny (z podfolderami)cd
: twój zdalny folderput -r .
źródło
cd
wkroczyłem do katalogu, który chciałem załadować. Dziękuję Ci!Czy mogę zasugerować nieco skomplikowaną odpowiedź, bez zipowania, ale zawierającą smołę?
No to ruszamy:
Spowoduje to spakowanie katalogu ./bin z tar (-cf: = utwórz plik), nazwa pliku - (brak, standardowe wyjście) i potokuj go przez polecenie ssh do target.org (który może być również adresem IP), gdzie polecenie w cudzysłowach wykonywane są: cd do bla i tar -xf (wypakuj plik) - brak, bez nazwy, po prostu stdin.
To tak, jakbyś spakował paczkę w domu, przyniósł ją na pocztę, a następnie pojechał do pracy, gdzie oczekujesz paczki i ją otworzył.
Być może istnieje o wiele bardziej eleganckie rozwiązanie, które korzysta tylko z sftp.
źródło
tar
to bardzo dobre rozwiązanie, jednak wymaga onossh
wsparcia przy logowaniu (sftp
na dodatek inny protokółssh
).tar
, w przeciwieństwie do innych, domyślnie działa rekurencyjnie, przesyła wszystkie pliki specjalne (FIFO, urządzenia blokowe / znakowe itp.), próbuje przetłumaczyć odwzorowanie UID / GID ze źródła na system docelowy i ma tradycyjną krótką linię poleceń. (Jeden wyjątek: „Gniazda domenowe Unix” nie są przesyłane. Ale kto ich potrzebuje?)pv
narzędzia do oglądania prędkości w długich transferachMożesz użyć yafc (jeszcze inny klient FTP / SFTP).
-r
Opcja działa tam bardzo dobrze.źródło
Możesz użyć rsync , który jest bardzo potężną alternatywą dla scp i sftp, szczególnie podczas aktualizacji kopii z komputera A na komputer B, ponieważ nie kopiuje on plików, które nie zostały zmienione; jest również w stanie usunąć pliki z komputera B, które zostały usunięte z komputera A (tylko wtedy, gdy zostanie o to poproszony).
na przykład :
Opcja -r służy do rekurencyjnego kopiowania plików, -z włącza kompresję podczas przesyłania, a -p zachowuje uprawnienia do plików (tworzenie, edycja itp.) Podczas kopiowania, co jest czymś, czego scp nie robi AFAIK. Możliwych jest wiele innych opcji; jak zwykle czytaj strony podręcznika.
Oryginalna odpowiedź Karolosa
źródło
Zaloguj się do zdalnego serwera za pomocą ssh, użyj sftp, aby połączyć się ponownie z urządzeniem, a następnie użyj
get -r
polecenia, aby przenieść katalogi na zdalny serwer. Polecenie get umożliwia rekurencyjne przesyłanie katalogów bez konieczności tworzenia katalogu.źródło
Sprawa SFTP:
Musiałem skopiować tę strukturę na ftp:
To rozwiązało mój problem:
źródło
Właśnie dowiedziałem się z Arch Linux Wiki , że możliwe jest zamontowanie sftp-share za pomocą sshfs. Biegnę jak sftp-server z chroot i więzienia i sshfs działa bardzo dobrze.
sshfs <sftpuser>@<server>:<read/writable/directory> <your/local/mount/directory>
fusermount -u <your/local/mount/directory>
źródło