Відповіді:
sftp
має обмежені можливості. Тим не менш, get
команда має варіант, який може зробити трюк: get -a
завершує часткове завантаження, тож якщо файл вже присутній на клієнті і принаймні такий же великий, як файл на сервері, він не завантажується. Якщо файл присутній, але коротший, кінець файлу буде перенесений, що має сенс, якщо локальний файл є продуктом перерваного завантаження.
Найпростіший спосіб зробити складні речі через SFTP - це використовувати SSHFS . SSHFS - це файлова система, яка використовує SFTP для створення віддаленої файлової системи як локального бездротового файлу. На клієнті SSHFS вимагає FUSE , який доступний у більшості сучасних уніцій. На сервері SSHFS потрібен SFTP; якщо сервер дозволяє SFTP, ви можете використовувати SSHFS з ним.
mkdir server
sshfs server.example.com:/ server
rsync -a server/remote/path /local/path/
fusermount -u server
Зауважте, що rsync через SSHFS не може скористатися алгоритмом передачі дельти, оскільки він не в змозі обчислити часткові контрольні суми на віддаленій стороні. Це однозначно для одноразового завантаження, але марно, якщо ви синхронізуєте файли, які були змінені. Для ефективної синхронізації модифікованих файлів використовуйте rsync -a server:/remote/path /local/path/
, але для цього потрібен доступ до оболонки SSH, а не лише SFTP. Доступ до оболонки може бути обмежений командою rsync.
Ви можете використовувати -a
прапор для get
команди:
$ sftp example.com
sftp> get -a hello.txt
Ви можете вказати, *
щоб завантажити весь каталог, звичайно.
Однак є кілька застережень.
Кращим варіантом буде використання rsync
:
rsync example.com:hello.txt
Це завжди надасть вам файл таким, який він є на сервері, лише перенести відмінності між локальною та віддаленою копією, якщо вони відрізняються, і він є загальнодоступним.