Категория: ssh

Синхронизация файлов - Rsync

Rsync — очень мощная утилита, которая позволяет:
- синхронизировать данные между между компьютерами в сети, дисками, локальными директориями или виртуальными машинами;
- копировать как отдельные файлы, так и целую структуру каталогов;
- сохранять данные о владельцах файлов, права доступа, время правки и другую служебную информацию;
- cохранять символические и жёсткие ссылки.

Синтаксис
rsync {параметры} {источник} {приемник}

Источник/Приемник
Источник/приемник может быть как локальным там и удаленным.

Ключевое правило
Слеш в конце пути к источнику означает "копировать СОДЕРЖИМОЕ этой директории". Отсутствие слеша означает "копировать САМУ директорию и её содержимое".

Локальный путь
Обычный путь к файлу или директории на текущей машине:
/www/site.com/public_html/ - путь от корня сервера
./wp-content/uploads/ - путь от текущей папки

Удаленный путь
Находится на удаленном сервере.
Формат - {пользователь}@{сервер}:{путь}
Пример - user@255.255.255.255:/data/www/site.com/

Параметры

Основные параметры

-a, --archive - архивный режим, флаг объединяющий сразу несколько других параметров (-rlptgoD).
-n, --dry-run - имитирует работу команды НЕ ВЫПОЛНЯЯ никаких реальных изменений на стороне приемника и демонстрирует в выводе что было бы при реальном выполнение команды без данного параметра.
-v, -vv, -vvv, --verbose - включает подробный вывод результата выполнения. При увеличение v увеличивается уровень детализации. Без данного параметра команды не выведет никаких результатов. Отлично работает с параметром --progress.
--progress - будет отображен процесс для каждого передаваемого файла в реальном времени.
-z, --compress - включает сжатие данных перед отправкой файла по сети. Файлы сжимаются "на лету" на стороне отправителя и распаковываются на стороне получателя.
Не стоит использовать:
при локальном копировании
при передаче уже сжатых файлов
--partial - по умолчанию rsync при прерывании передачи удаляет не до конца переданный файл на "приёмнике", чтобы в следующий раз начать его заново с нуля. С этим параметром "говорит" не удалять частично переданные файлы. В следующий раз он попытается докачать их с того места, где закончил.
--partial-dir={DIR} - более продвинутый и безопасный аналог. rsync будет сохранять частичные файлы не в целевую директорию, а в указанную временную {DIR}.
--bwlimit={RATE} - Жёсткое ограничение скорости передачи данных. Значение указывается в килобайтах в секунду.
--delete - Этот параметр заставляет rsync сделать целевую директорию - идеальной зеркальной копией исходной. Она УДАЛЯЕТ на приёмнике все файлы и папки, которых в источнике нет.
--ignore-existing - rsync будет копировать только те файлы, которых ещё нет на приёмнике. Если файл с данным именем уже существует в цели, он будет проигнорирован, даже если содержимое или метаданные отличаются.
-u, --update - rsync будет копировать файл только в том случае, если файл в источнике новее (по дате изменения), чем файл на приёмнике. Если файл на приёмнике новее или такой же, он будет проигнорирован.

Дополнительные параметры

Входят в параметр -a

-r, --recursive - рекурсивное копирование, без этого параметра будут скопированы только файлы из указанной директории.
-l, --links - сохраняет симлинки как симлинки.
-p, --perms - сохраняет права доступа для файлов и папок.
-t, --times - сохраняет временные метка файлов и папок.
-g, --group - сохранять группу. Файлы будут принадлежать той же группе, что и на источнике.
-o, --owner - сохраняет владельца.
-D - сохранять device files (специальные файлы устройств). Это эквивалентно одновременному использованию --devices --specials.
Примеры
Копировать содержимое папки uploads на удаленный сервер с сохранением исходных данных файлов, сжатием для отправки и подробным отображением процесса

rsync -avz --progress ./uploads/ user@255.255.255.255:/home/data/www/site.com/public_html/wp-content/uploads/

Поиск больших файлов на сервере

find . -type f -size +200M -exec du -h {} + 2>/dev/null | sort -hr

gitbash alias

// открываем
nano ~/.bashrc


// вписываем
alias 2dit-dev='ssh dev@43.12.712.42'

// применяем
source ~/.bashrc

SSH Сортировка файлов

du --max-depth=1 . | sort -n -r