rsync (англ. Remote Synchronization) — программа для UNIX-подобных систем, которая выполняет синхронизацию файлов и каталогов в двух местах с минимизированием трафика, используя кодировку данных при необходимости. rsync может копировать или отображать содержимое каталога и копировать файлы, опционально используя сжатие и рекурсию. wiki
Общий вид команды
rsync {OPTIONS} {FROM} {TO}
Копирование содержимого директории /local/folder/ с локальной машины на удаленный сервер user@server, в директорию /remote/folder/
rsync -e "ssh -p 22" --progress --partial --force -avz /local/folder/ user@server:/remote/folder/
Важно обратить внимание на последний слэш: если он есть то копируется содержимое папки, иначе - вся директория, вместе с названием.
--progress - отображение прогрессбара --partial - сохранение частей файлов после копирования (см. детали алгоритма работы rsync), ускоряет последующие копирования--forse - удаление не пустых директорий-e ssh - использование ssh для синхронизации, порт указывается так -e "ssh -p22", настройка подключений по ssh без ввода пароля описана тут-a - алиас для группы ключей (-rlptgoD), сохраняет разные атрибуты файлов/директорий при копировании, включает рекурсию-v - вывод в консоль подробных действий -z - компрессия передаваемых файловКопирование отдельного файла
rsync --progress --partial -avz /local/file.ext user@remote.server:/remote/folder/
Синхронизация двух локальных папок с удалением из {TO} всего чего нет в {FROM}
rsync -av --delete /local/from/ /local/to/
Тоже предназначение, как и у предыдущей команды, только физически ничего не меняется (симуляция процесса)
rsync -avn --delete /local/from/ /local/to/
Показать разницу между двумя каталогами
rsync -avi /local/folder1/ /local/folder2/
И то, из-за чего мне понадобился rsync: надо синхронизировать из периодически обновляемого хранилища группу файл в другую директорию. В rsync есть опция --files-from=list.txt которая синхронизирует только файл из списка в list.txt, разделитель - новая строка.
rsync -avh --files-from=list.txt --progress /local/folder1/ /local/folder2/
Несколько других полезных опции rsync
--exclude='*.pyc' - исключить файлы совпадающие с маской *.pyc, regexp не поддерживается--exclude-from='files.txt' - исключить файлы, которые упомянуты в files.txt, разделить имен - новая строка-h - human-readable формат для размера файлов-u - если файл в {TO} новее чем в {FROM}, то не заменять--existing - обновление только уже существующих файлов, новые не копируются--max-size='7MB' - не передавать файлы, больше 7 МБайтДля rsync есть графический интерфейс - Grsync.
Под Ubuntu нужно установить пакет grsync
sudo apt-get install grsync
Дополнительное чтиво