Перейти к содержанию

rsync

Полезные параметры

  • -z, --compress — сжатие потока при передаче. Удобно использовать при скачивании большого лога по сети
  • --partial — сохранять частично переданное (докачка)
  • --progress — показ процента выполнения
  • -P — эквивалент для --partial --progress
  • -r, --recursive — рекурсивно обрабатывать каталоги
  • -a, --archive — архивный. Эквивалент -rlptgoD (--recursive --link --perms --times --group --owner --devices). Рекурсивно, копируя симлинки, права, время модификации, группу, владельца, инфу об устройствах
  • --info=progress2 — инфа по всей передаче, а не по отдельным файлам. Используется без --progress
  • -R, --relative — использовать относительные пути
  • -u, --update — не переписывать более новые файлы

Слеш в конце исходного пути

В зависимости от того, стоит ли слэш в конце пути, rsync копирует либо саму папку, либо её содержимое. Если указать слэш в конце — будет скопировано только содержимое папки. Без слэша — скопируется сама папка.

Копирование каталога. Каталог images появится в новом месте

rsync  -r  /var/files/images  /tmp/target

Копирование содержимого каталога. Каталог images не появится в новом месте

rsync  -r  /var/files/images/  /tmp/target

Относительные пути

Позволяет использовать относительные пути, которые будут воссозданы в точке назначения. Работает с третьей версии rsync.

Например, надо засинхронить несколько файлов Битрикса, находящихся в разных каталогах. В папке /hdd/sites/test-site/ повторится структура папок после /./

rsync \
  --relative \
  host:/var/www/production-site/./www/bitrix/.settings.php \
  host:/var/www/production-site/./www/bitrix/php_interface/dbconn.php \
  /hdd/sites/test-site/

Примеры

  • копирование каталога. Исходная папка появится в месте назначения

    rsync -r /from/directory /to/
    

  • копирование файлов каталога. Исходная папка не появится в месте назначения

    rsync -r /from/directory/* /to/target-directory
    

  • cинхронизация модуля bizproc с удалённым сервером

    rsync -rzP ssh-host://var/www/my-site/www/bitrix/modules/bizproc /hdd/sites/my-site/www/bitrix/modules
    

  • синхронизация нескольких файлов

    rsync -zP host:file1 host:file2 host:file3 /to/target-directory/
    

  • копирование со сменой владельца и группы

    sudo rsync --chown=www-data:www-data my-file.php /var/www/my-site/
    

  • перенос каталога с исключением файлов по типу. Чувствителен к регистру

    rsync --recursive --partial --info=progress2 --exclude="*.zip" --exclude="*.rar" ssh-host:/sites/my-site/www/upload/main /site/www/upload
    # указание исключения в отдельном файле
    rsync --recursive --partial --info=progress2 --exclude-from=rsync-exclude.txt ssh-host:/sites/my-site/www/upload/main /site/www/upload
    

Пример содержимого файла rsync-exclude.txt
*.zip
*.doc
*.DOC
  • rsync через ssh с указанием порта (-e, -rsh=COMMAND)

    rsync  -e "ssh -p 9999"  user@host:/path/to/file  /local/path/to
    sudo  -u www-data  rsync  -e "ssh -p 9999"  -r  user@host:/var/www/my-site  /var/www
    

  • rsync с подменой пользователя на удалённой стороне. Например, если надо залить файл от имени пользователя www-data. На удалённой стороне должне быть настроен беспарольный запуск rsync от имени www-data

rsync --rsync-path "sudo -u www-data rsync"  index.php  user@host:/var/www/my-site/
  • список файлов через массив — "${SOURCES[@]}". Позволяет использовать комментарии
    SOURCES=(
        # первое множество файлов
        "host:/var/www/production-site/./www/bitrix/components"
        "host:/var/www/production-site/./www/bitrix/modules"
    
        # второе множество файлов
        "host:/var/www/production-site/./www/upload/iblock"
        "host:/var/www/production-site/./www/upload/main"
    )
    
    rsync --relative "${SOURCES[@]}" --recursive /hdd/sites/test-site/