Używasz sftp do przeniesienia katalogu?


50

Kiedy próbuję użyć sftp do przesłania katalogu zawierającego pliki, pojawia się komunikat o błędzie:

skipping non-regular file directory_name

Katalog zawiera kilka plików i dwa podkatalogi.

Co ja robię źle?

Odpowiedzi:


48

sftp, podobnie jak cpi 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 -ropcją.

Dodaj więc -rdo polecenia.


2
-r po poleceniu put? Otrzymuję komunikat o błędzie „put: Nieprawidłowa flaga -r”, jeśli to zrobię. Dodanie go do oryginalnej komendy sftp również nie działa.
haziz

5
Dodaj -rdo sftppolecenia podczas łączenia. sftp -r user@host
Kevin

1
@Kevin Pojawia się następujący błąd „sftp: nieznana opcja --r”
Amatya

2
Pamiętaj, że jest tam dość długo stojący bug w SFTP OpenSSH: podczas kopiowania rekursywnie katalog na zdalnym serwerze, sam katalog musi już istnieć na serwerze docelowym inaczej transfer nie powiedzie się bez wyraźnego komunikatu o błędzie: Couldn't canonicalise: No such file or directory.
WhiteWinterWolf,

5
powinno być coś w stylu:# sftp user@remote-host #> get -r remote-folder
hbinduni

20

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.

( -aopcja zajmuje się np. rekurencją katalogu)


3
Trochę wyjaśnienia na temat wymienionych parametrów: -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, -Paby uniknąć dziwnego błędu (błąd?) protocol version mismatch); -z= włącz kompresję przesyłanych danych.
WhiteWinterWolf,

@WhiteWinterWolf wydaje się, że zależy od wersji, czy -lnależy użyć przełącznika, czy nie. Pamiętam starsze wersje nie obejmują -lw -a.
polemon

5

Możesz także korzystać z użycia scp. Ogólny format to

scp -rp sourceDirName username@server:destDirName

scpoznacza „bezpieczną kopię”. Flagi są

  • -r przechodzić do podkatalogów
  • -p zachowaj czasy modyfikacji

Uważam, że pozostałe elementy są oczywiste


i scp -rp -P <port> .... przy korzystaniu z niestandardowego portu
Pancho

4

To działa dla mnie:

1) połącz za pośrednictwem sftpzdalnego hosta

2) przejdź do zdalnego katalogu, który chcesz skopiować. (Przykład: muzyka CD)

3) przejdź do katalogu lokalnego, do którego chcesz skopiować pliki. (Przykład: pulpit lcd)

4) Wydaj to polecenie: get -r *


4

Jeśli rsyncnie ma takiej opcji, poleciłbym następnie lftp:

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

Następnie użyj mirrorpolecenia, aby przesyłać rekurencyjnie, w następujący sposób:

mirror -R

(Zauważ, że rekurencja jest domyślnie. -RJest na odwrocie - aby przesłać polecenia lustro zamiast pobrania Spróbuj dodać. --dry-runZrobić próbę, aby upewnić się, że robi to, czego oczekują.)

Lub przesłać bez rekurencji:

mirror --no-recursion

Musisz przejść do cdkatalogów, które chcesz dublować. Działa świetnie!


2

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

0

To trochę kłótnia, ale dla mnie działa to:

  1. Służy sshdo logowania do zdalnego komputera
  2. Użyj sftpze zdalnego komputera na lokalny
  3. Następnie użyj getpolecenia z -ropcją przeniesienia katalogu i wszystkich jego plików.

1
nie pracuj z -rsftp> get -r data /opt/bin get: Invalid flag -r
Skynet

0

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

  • --delete - usuwa pliki, które nie istnieją w nadawcy (systemie)
  • -v - verbose (-vv poda bardziej szczegółowe informacje)
  • -e „opcje ssh” - określ ssh jako zdalną powłokę
  • -a - tryb archiwizacji - zachowuje uprawnienia (właścicieli, grup), czasy, dowiązania symboliczne i urządzenia
  • -r - wróć do katalogów
  • -z - kompresuje dane pliku podczas przesyłania
  • --Exclude „foldername” - wyklucza odpowiedni folder z transferu
  • -P - pokazuje postęp podczas przesyłania

Mam nadzieję, że to pomaga!


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.