Odpowiedzi:
sftp
, podobnie jak cp
i scp
, wymaga, aby podczas kopiowania folderu (i oczywiście jego zawartości), trzeba było wyraźnie powiedzieć mu, że chcesz przenieść folder rekurencyjnie z -r
opcją.
Dodaj więc -r
do polecenia.
-r
do sftp
polecenia podczas łączenia. sftp -r user@host
Couldn't canonicalise: No such file or directory
.
# sftp user@remote-host
#> get -r remote-folder
Mogę tylko zasugerować, że używasz rsync
. Jest to nieco standard branżowy, gdy przenosisz pliki przez bezpieczne połączenia.
rsync -alPvz ./source_dir server.com:destination_dir
Właśnie tego używam od lat.
( -a
opcja zajmuje się np. rekurencją katalogu)
-a
= rekurencja + zachowaj dowiązania symboliczne, uprawnienia, czasy modyfikacji, właściciela, grupę, pliki specjalne i pliki urządzeń (te ostatnie wymagają uprawnień superużytkownika); -l
= zachowaj dowiązania symboliczne (już zawarte w -a
); -P
= pokaż postęp podczas transferu + zachowaj częściowo przesłane pliki; -v
= pełny tryb (jednak wydaje się obowiązkowy, gdy używa się go, -P
aby uniknąć dziwnego błędu (błąd?) protocol version mismatch
); -z
= włącz kompresję przesyłanych danych.
-l
należy użyć przełącznika, czy nie. Pamiętam starsze wersje nie obejmują -l
w -a
.
Możesz także korzystać z użycia scp
. Ogólny format to
scp -rp sourceDirName username@server:destDirName
scp
oznacza „bezpieczną kopię”. Flagi są
-r
przechodzić do podkatalogów-p
zachowaj czasy modyfikacjiUważam, że pozostałe elementy są oczywiste
Jeśli rsync
nie ma takiej opcji, poleciłbym następnie lftp
:
lftp sftp://user@host.com/path/path/
Następnie użyj mirror
polecenia, aby przesyłać rekurencyjnie, w następujący sposób:
mirror -R
(Zauważ, że rekurencja jest domyślnie. -R
Jest na odwrocie - aby przesłać polecenia lustro zamiast pobrania Spróbuj dodać. --dry-run
Zrobić próbę, aby upewnić się, że robi to, czego oczekują.)
Lub przesłać bez rekurencji:
mirror --no-recursion
Musisz przejść do cd
katalogów, które chcesz dublować. Działa świetnie!
Jeśli możesz, użyj sshfs . Jest to system plików FUSE , dostępny na większości współczesnych urządzeń unikatowych i współpracuje z dowolnym serwerem SFTP. Jest to zdalny system plików: umożliwia manipulowanie zdalnymi plikami (za pośrednictwem protokołu SFTP) za pomocą zwykłych narzędzi.
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
To trochę kłótnia, ale dla mnie działa to:
ssh
do logowania do zdalnego komputerasftp
ze zdalnego komputera na lokalnyget
polecenia z -r
opcją przeniesienia katalogu i wszystkich jego plików.sftp> get -r data /opt/bin get: Invalid flag -r
Jeśli pytasz w rzeczywistości „jak użyć sftp do przeniesienia katalogu”, to
sftp -r user@server
Ale jeśli przenosisz katalog, mogę zaproponować dwie lepsze opcje, w zależności od twoich potrzeb. sftp
wymaga zalogowania się do zdalnego serwera za pomocą wiersza polecenia podobnego do ssh, ale jeśli wszystko, czego potrzebujesz, to pliki, istnieją łatwiejsze i szybsze sposoby.
Scp
Aby przesłać jednorazowo, aby przesłać, spróbuj:
# 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
Jeśli planujesz regularnie synchronizować katalogi, użycie rsync ma sens. Wykonuje delty między dwoma katalogami, oszczędzając czas przesyłania i danych przez przewód.
rsync -r -a -v -e ssh --delete source_dir user@server:dest
Oto lista niektórych z najczęstszych opcji rsync: ( wzięte stąd )
Mam nadzieję, że to pomaga!
możesz dostać się z serwera na lokalną ścieżkę przez
scp -rp user@server:directoryname(full path) .