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 fibon82@machineB.com
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/ fibon82@machineB.com:/home/b/

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/ user@remote.host.com:/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.


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.


-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/ user@remote.host.com:/home/b/

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


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

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/

W mputOpenSSH nie ma polecenia sftp. Może masz na myśli psftp?
Martin Prikryl
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.