sftp - як скопіювати лише файли з папки, яка не існує в папці призначення


19

Мене цікавить, чи можливо getфайли sftp, але не дозволяти йому повторно завантажувати файли, які вже є в цільовій папці?

Відповіді:


20

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.


7

Ви можете використовувати -aпрапор для getкоманди:

$ sftp example.com
sftp> get -a hello.txt

Ви можете вказати, *щоб завантажити весь каталог, звичайно.

Однак є кілька застережень.

  • Це не працює в OS X. Це може не працювати в інших системах. Я тестував його на Ubuntu 15.04.
  • Ця опція призначена для відновлення перерваних завантажень. Якщо ваш файл змінився, результатом буде пошкоджене завантаження.

Кращим варіантом буде використання rsync:

rsync example.com:hello.txt

Це завжди надасть вам файл таким, який він є на сервері, лише перенести відмінності між локальною та віддаленою копією, якщо вони відрізняються, і він є загальнодоступним.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.