Лучше всего с этой задачей справляется программа rsync (remote synchronization). Она эффективно синхронизирует любые объёмы файлов и каталогов. Её удобно настроить для автоматизированной работы. Программа никогда меня не подводила.
Установка:
apt install rsync
Для передачи файлов я использую ssh и ключ для авторизации, чтобы обходиться без паролей.
Передача файла и каталога на удалённый сервер:
/usr/bin/rsync -Pav -e "ssh -i /home/kornev/.ssh/файл_ключа" /каталог/файл_для_передачи root@ip_сервера:"/каталог/на/сервере"
/usr/bin/rsync -Pav -e "ssh -i /home/kornev/.ssh/файл_ключа" /каталог/для/передачи root@ip_сервера:"/каталог/на/сервере"
Файл и каталог будут помещены в указанный каталог.
Тоже самое в обратном направлении:
/usr/bin/rsync -Pav -e "ssh -i /home/kornev/.ssh/файл_ключа" root@ip_сервера:"/каталог/файл_на_сервере" /каталог/локальный
/usr/bin/rsync -Pav -e "ssh -i /home/kornev/.ssh/файл_ключа" root@ip_сервера:"/каталог/на/сервере" /каталог/локальный
Если в каталоге назначения уже есть файл с тем же именем, то будет произведено сравнение. Передача файла произойдет только если он более новый. Если файл не изменился, то он остается на своем месте, программа пропускает его и продолжает свою работу.
Лимит скорости
Команда --bwlimit=KBPS
устанавливает ограничение на скорость передачи. Порог задаётся именно в Кб, а не в Кбит.