sftp: prześlij wszystkie pliki, katalogi i podkatalogi zawarte w folderze

27

Na komputerze AI ma folder

/home/a/

Na komputerze BI mam folder

/home/b/

Chciałbym przenieść wszystkie pliki, katalogi i podkatalogi / home / a w / home / b za pomocą sftp Na komputerze AI wypróbowałem polecenia:

sftp [email protected]
put /home/a/* /home/b/

ale to nie działa, pojawia się komunikat o błędzie: „pomijanie nieregularnego pliku / home / a / a1” ... [a1 jest podkatalogiem]
Jak mogę zmodyfikować instrukcję put?

Dzięki! :)

EDYTOWAĆ:

Rozwiązałem za pomocą SCP:

scp -r /home/a/ [email protected]:/home/b/
fibon82
źródło
2
put -rteż by działał.
WakiMiko,
1
Ok, ale skąd mam wiedzieć, że dla polecenia „put command” dostępna jest opcja -r? Jeśli spojrzę tutaj, opisana jest tylko flaga -P ... To samo w instrukcji Dzięki! :)
fibon82
Zamiast tego powinieneś opublikować to jako odpowiedź.
NN
Tak. Zamiast EDYTOWAĆ swoje pytanie z odpowiedzią, powinieneś odpowiedzieć na własne pytanie i zaakceptować je.
@ fibon82 Aby uzyskać aktualną instrukcję obsługi OpenSSH sftp, zapoznaj się z projektem OpenSSH .
Martin Prikryl

Odpowiedzi:

21

Chociaż rsync nie jest ściśle równoważne z sftp, jest bardzo potężną alternatywą dla scp i sftp, szczególnie podczas aktualizacji kopii z komputera A na komputer B, ponieważ nie kopiuje 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).

W twoim przypadku składnia byłaby następująca

rsync -zrp /home/a/ [email protected]:/home/b/

-rOpcja jest dla plików rekursywnie kopiowanie, -zumożliwia kompresję podczas przenoszenia i -pzachowuje uprawnienia do plików (tworzenie Plik, Edycja, etc.) podczas kopiowania, czyli coś, co scp nie robi AFAIK. Możliwych jest wiele innych opcji; jak zwykle czytaj manstrony.

Karolos
źródło
Oh dziękuję Ci! :) Nowa rzecz, której się nauczyłem!
fibon82
@ fibon82: Nie ma za co :)
Karolos,
1
kocham cię, zsynchronizowałem 400 MB danych w ciągu 1 minuty, po prostu używając twojego kodu. Dodałbym, że powinieneś również użyć --progress, w przeciwnym razie będziesz gapił się na nic, nie wiedząc, co się dzieje (i przy jakiej prędkości :))
Sandro Antonucci,
1
Niestety rsyncnie mówi - sftpProtokół. Więc jeśli założyć sftp-chroot używając ssh„s Wbudowanyinternal-sftp następnie rsynckończy się niepowodzeniem.
Tino
17

W sftptym poleceniu rekurencyjnie ładuje zawartość bieżącego katalogu do zdalnego bieżącego katalogu:

 put -r .

Zobaczyć man sftp.

Carlos Da Costa
źródło
-rPrzełącznik jest obsługiwany od OpenSSH 5.4 tylko.
Martin Prikryl
1
Zauważ, że -rprzełącznik jest tylko po stronie klienta (część sftppolecenia). Tak więc strona serwera (tutaj: odbieranie) nie potrzebuje OpenSSH 5.4, tylko klient musi go obsługiwać.
Tino
9

scp(bezpieczna kopia) to de facto Linux do przesyłania plików przez bezpieczny tunel. W twoim przypadku chciałbyś użyć przełącznika rekurencyjnego, np .:

scp -r /home/a/ [email protected]:/home/b/
deed02392
źródło
5
sftp i scp to tak naprawdę różne protokoły, oba oparte na ssh.
paradroid
1
Tak, jeśli serwer zezwala tylko na protokół sftp, ta odpowiedź nie działa.
рüффп
4

Spróbuj użyć

put -r /home/a/ /home/b/

Aby uzyskać więcej informacji sprawdź: to

guest_who
źródło
1
-rPrzełącznik jest obsługiwany od OpenSSH 5.4 tylko.
Martin Prikryl
Zauważ, że -rprzełącznik jest tylko po stronie klienta (część sftppolecenia). Tak więc strona serwera (tutaj: odbieranie) nie potrzebuje OpenSSH 5.4, tylko klient musi go obsługiwać. I: To powinna być zaakceptowana odpowiedź , ponieważ uzyskanie (prawdopodobnie nieobsługiwanego) rsyncjako odpowiedzi na pytanie oznaczone sftpjest nieco mylące.
Tino
0

Właściwie put -r powinien działać. Ale folder docelowy musi znajdować się na zdalnym hoście:

sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder
 Couldn't canonicalize: No such file or directory
 ....
sftp> mkdir sourcefolder
sftp> put -r sourcefolder
 Uploading sourcefolder/ to /user/folder/sourcefolder
 Entering sourcefolder/
 sourcefolder/file1
 sourcefolder/file2
Dieter
źródło
Czy dodałeś referencje i dowody potwierdzające to, co podałeś i potwierdziłeś, że na tę odpowiedź nie ma już odpowiedzi w jednej z istniejących odpowiedzi w poście. Przeczytaj „Dlaczego potrzebuję 50 reputacji, aby móc komentować”, aby upewnić się, że możesz zacząć komentować.
Pimp Juice IT,
-1

W moim przypadku rsyncnie było to możliwe, więc użyłem:

mput -rp /home/a/ /home/b/
jayarjo
źródło
W mputOpenSSH nie ma polecenia sftp. Może masz na myśli psftp?
Martin Prikryl