Zastanawiam się, czy można get
za pomocą plików sftp
, ale uniemożliwisz ponowne pobieranie plików, które już istnieją w folderze docelowym?
sftp
ma ograniczone możliwości. Niemniej jednak get
polecenie ma opcję, która może załatwić sprawę: get -a
wykonuje częściowe pobieranie, więc jeśli plik jest już obecny na kliencie i jest co najmniej tak duży, jak plik na serwerze, nie zostanie pobrany. Jeśli plik jest obecny, ale krótszy, koniec pliku zostanie przesłany, co ma sens, jeśli plik lokalny jest produktem przerwanego pobierania.
Najłatwiejszym sposobem wykonywania skomplikowanych czynności za pomocą SFTP jest użycie SSHFS . SSHFS to system plików, który używa SFTP, aby zdalny system plików pojawiał się jako lokalny system plików. Na kliencie, SSHFS wymaga BEZPIECZNIKA , który jest dostępny w większości nowoczesnych jednorożców. Na serwerze SSHFS wymaga SFTP; jeśli serwer zezwala na SFTP, możesz użyć SSHFS.
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
Zauważ, że rsync przez SSHFS nie może skorzystać z algorytmu transferu delta, ponieważ nie jest w stanie obliczyć częściowych sum kontrolnych po stronie zdalnej. Nie ma to znaczenia przy jednorazowym pobieraniu, ale marnuje się, jeśli synchronizujesz zmodyfikowane pliki. Użyj wydajnej synchronizacji zmodyfikowanych plików, rsync -a server:/remote/path /local/path/
ale wymaga to dostępu do powłoki SSH, a nie tylko dostępu SFTP. Dostęp do powłoki można jednak ograniczyć do komendy rsync.
Możesz użyć -a
flagi dla get
polecenia:
$ sftp example.com
sftp> get -a hello.txt
Możesz *
oczywiście pobrać cały katalog.
Istnieje jednak kilka zastrzeżeń.
Lepszą opcją byłoby użycie rsync
:
rsync example.com:hello.txt
To zawsze da ci plik taki, jaki jest na serwerze, przenosząc różnice tylko między lokalną a zdalną kopią, jeśli się różnią, i jest to powszechnie dostępne.