rsync копирование с исключением директорий и файлов.
Имеется нагруженный web проект, окало 150 Гигов файлов.
Решил оптимизировать backup файлов, убрать директории которые не нужно помещать в backup.
Исключения нужно указывать относительное расположение от корневого каталога копирования директории или файла.
К примеру.
Каталог 1 /www/site/backup/
Есть каталог 2 с таким же названием /www/site/sys_log/backup/ расположен он в другом месте сайта.
Если указать исключение ‘backup/’ то правило сопоставимо к двум директориям.
Указывать нужно полный путь от корневого каталога.
Корень /www/site/ значит указываем sys_log/backup/ и т.д.
Исключаем из backup директорию backup, со всеми повторениями названия директории у сайта.
rsync --exclude='/backup/' -a --no-compress --info=progress2 /www/site/ /mnt/backup/site
Исключаем из backup файл.
rsync --exclude='/adm/adm.php' -a --no-compress --info=progress2 /www/site/ /mnt/backup/site
Исключаем из синхронизации несколько директорий и файлы.
sys_log/backup/ — не будем вовсе копировать эту директорию.
include/* — Директорию оставляем, но без содержимого.
adm/adm.php — Файл не копируем.
rsync --exclude='adm/adm.php' --exclude='sys_log/backup/' --exclude='include/*' -a --no-compress --info=progress2 /www/site/ /mnt/backup/site
Можно попробовать и такой вариант исключения.
--exclude={'/adm/sys.php' ,'/include/arm/','/sys/mydir.html'}
Либо вовсе исключить из копирования по расширению файла.
--exclude '*.log'
Так же все можно поместить в файл, что бы команда была короче.
Создаем файл /mnt/syn_exclude.txt c таким содержимым, это мы не будем синхронизировать:
/sys_log/backup/* /backup/ /sys/include/* /adm/adm.php
Команда.
rsync --exclude-from='/mnt/syn_exclude.txt' -a --no-compress --info=progress2 /www/site/ /mnt/backup/site
Еще пример.
rsync -a --no-compress --delete --info=progress2 --exclude-from='/mnt/files-exclude.txt' /var/www/site/upload/ /var/www/site-1/upload/
Содержимое файла исключений /mnt/files-exclude.txt
/resize_cache/ /optimize/ /iblock.zip /__iblock/
Важная заметка — в файле files-exclude.txt исключение директорий и файлов должно начинаться со / (слэша), так rsync поймет, что файл нужно исключать начиная с начала каталога.
Если не указать / (слэш) в начале путей в файле files-exclude.txt, данные будут искаться по всей директории.
Если мы хотим просто оставить директорию пустой, не копировать содержимое, то можно указать исключение так
'/resize_cache/*'
Вот как бы и все, примеры rsync копирование с исключением директорий и файлов.
Есть еще способ ограничить копирование по размеру, но я такой способ не использовал, не было нужды использовать.
--max-size=550m --min-size=20m