scp с аутентификацией без пароля работает нормально, но если удалить файл в источнике, он не будет реплицирован, т.е. каталог назначения не полностью заменен исходным. Я вижу, что новые файлы или модификации правильно реплицируются.
scp -r /user/local/img root@192.168.18.73:/user/local/img
scp - это всего лишь инструмент копирования, поэтому, если вам нужно использовать scp, ваш единственный реальный выбор - сначала очистить дерево каталогов назначения.
В качестве альтернативы вам, вероятно, следует изучить возможность использования rsync, он будет работать через ssh с использованием настройки без пароля, которая у вас есть сейчас, и имеет много преимуществ (он может реплицировать удаления, передавать только измененные данные, поэтому копии будут быстрее и могут сжимать данные во время передачи). Если вы измените свою команду на эту, вы должны получить желаемые результаты (хотя сначала протестируйте ее, чтобы на 100% убедиться, что она делает то, что вы ищете!):
rsync -avz --del /user/local/img root@192.168.18.73:/user/local/img
scp
работает как стандартный cp
- он копирует то, что вы ему говорите скопировать. Ваша команда выше говорит, что она должна скопировать локальную папку /usr/local/img
к /usr/local/img
на удаленном сервере; если удаленная папка уже существует, она будет скопирована в /usr/local/img/img
.
scp очень похож на cp, он не удаляет файлы назначения, если источник был удален. Если вы хотите синхронизировать исходный и целевой каталоги, тогда rsync - это путь вперед.
rsync -avz --delete /user/local/img root@192.168.18.73:/user/local/img
вы также можете использовать rsync поверх ssh
rsync -avz -e ssh --delete /user/local/img root@192.168.18.73:/user/local/img