Rsync - это полезный инструмент командной строки Linux, который синхронизирует и копирует файлы и каталоги. Вы можете использовать этот инструмент для локальной синхронизации данных между каталогами и дисками или между двумя удаленными машинами.
Основные команды rsync в Linux синхронизируют все данные из указанного вами места. Во многих сценариях резервного копирования вы можете захотеть исключить определенные файлы, каталоги или типы файлов.
Следуя примерам в этом руководстве, вы узнаете, как исключить файлы или каталоги с помощью rsync. Мы перечислим наиболее распространенные случаи использования исключения, чтобы охватить ваше повседневное использование rsync.
Необходимые условия
- Пользователь с правами sudo или root
- Доступ к командной строке/терминальному окну
- Rsync установлен в вашей системе
Принцип работы опции исключения rsync
Опция --exclude в команде rsync использует относительные пути к исходному каталогу. Добавьте опцию --exclude к команде rsync, а затем относительный путь к каталогу или файлу(ам).
Основной синтаксис опции rsync exclude выглядит следующим образом:
1 | rsync [OPTIONS] --exclude '[file_or_directory]' [source]/ [destination]/ |
Замените [source]/ именем каталога, который вы хотите использовать в качестве источника для передачи данных в другое место.
Замените [destination]/ на имя каталога, который rsync будет использовать в качестве целевого местоположения для ваших данных. Если каталог не существует, rsync создаст его для вас и перенесет файлы в этот каталог.
Чтобы создать резервную копию файлов в удаленном месте, следуйте нашему другому руководству, чтобы узнать, как копировать или передавать файлы с помощью rsync через SSH.
Косая черта (/) в исходном каталоге изменяет поведение команды rsync.
- Если вы не используете косую черту, исходный каталог копируется в каталог назначения, а затем содержимое этого каталога.
- Если вы используете косую черту, rsync копирует только содержимое исходного каталога без создания дополнительного уровня каталога.
Исключение определенного файла
В приведенных ниже примерах исключения rsync мы будем использовать опции -a (архив) и -v (verbose) (-av). Опция -a синхронизирует каталоги рекурсивно, сохраняя разрешения, символические ссылки, права собственности и настройки групп. Флаг -v необязателен и печатает информацию о ходе и состоянии команды rsync.
Чтобы исключить файл при передаче содержимого папки с помощью rsync, укажите файл и относительный путь.
Например:
1 | rsync -av --exclude 'testfile1.txt' sourcedir/ destinationdir/ |
Эта команда позволяет скопировать файлы в destinationdir из sourcedir, но исключить testfile1.txt.
Как видно из вывода, testfile1.txt отсутствует в списке.
Если вы хотите проверить все примеры в руководстве, пожалуйста, удалите каталог назначения, прежде чем пробовать новый пример.
Для этого выполните следующую команду:
1 | sudo rm -rf destinationdir |
Исключение определенного каталога
Теперь, когда вы знаете, как использовать команду rsync --exclude file, используйте этот инструмент аналогичным образом для исключения каталога.
Укажите каталог, который вы хотите исключить (вместо имени файла):
1 | rsync -av --exclude 'dir1' sourcedir/ destinationdir/ |
Эта команда скопировала содержимое sourcedir в destinationdir и исключила dir1, как видно из вывода.
Исключение файлов или каталогов на основе шаблона
Используйте звездочку * (подстановочный знак) при определении имени файла или каталога, чтобы исключить все, что соответствует шаблону.
Чтобы исключить файлы, начинающиеся с test, выполните эту команду:
1 | rsync -av --exclude 'test*' sourcecedir/ destinationdir/ |
Все файлы и каталоги, соответствующие этому шаблону, будут исключены из передачи.
Аналогичным образом можно использовать подстановочный знак, чтобы исключить все каталоги, которые заканчиваются на определенный шаблон.
Выполните эту команду, чтобы исключить все каталоги, которые заканчиваются цифрой 3:
1 | rsync -av --exclude '*3' sourcedir/ destinationdir/ |
Вы можете использовать звездочку до и после шаблона, чтобы дополнительно уточнить критерий --exclude.
Исключение определенного типа файлов
Инструмент rsync позволяет исключить определенные типы файлов при синхронизации данных. Используйте звездочку *, за которой следует расширение типа файла, который вы хотите исключить.
Например, вы можете захотеть создать резервную копию каталога, содержащего множество файлов .iso, резервное копирование которых вам не нужно.
Чтобы исключить определенный тип файлов, в данном случае .iso, выполните эту команду:
1 | rsync -av --exclude '*.iso' sourcedir/ destinationdir/ |
Исключение файлов по размеру
Во время передачи файлов вы можете указать минимальный или максимальный размер файлов, которые вы хотите исключить. Если исходный каталог содержит много больших файлов, резервное копирование которых нежелательно, используйте параметр --max-size=size_in_mb_or_gb. Замените size_in_mb_or_gb на желаемый размер.
Например, чтобы исключить все файлы размером более 500 МБ, выполните следующую команду:
1 | rsync -av --max-size=500m sourcedir/ destinationdir/ |
С другой стороны, чтобы исключить файлы меньше определенного размера, используйте опцию --min-size=size_in_mb_or_gb.
Например, вы хотите передать каталог с изображениями, но в нем много файлов миниатюр. Если все ваши изображения имеют размер более 1 МБ, то вы можете исключить все файлы меньше этого размера.
Для этого выполните следующую команду:
1 | rsync -av --min-size=1m sourcedir/ destinationdir/ |
Не используйте опцию --exclude rsync при определении минимального или максимального размера файла.
Исключение нескольких файлов или каталогов
Добавьте несколько опций --exclude, чтобы исключить несколько файлов или каталогов. Вы можете комбинировать любые команды rsync --exclude folder и rsync --exclude file(s) для передачи только нужных вам данных. Любая из команд, о которых мы говорили ранее, может быть использована в одной строке.
Следующая команда исключит все файлы с расширением .txt, а также каталоги dir3 и dir4:
1 | rsync -av --exclude '*.txt' --exclude 'dir3' --exclude 'dir4' sourcedir/ destinationdir/ |
Вы можете добавить столько записей --exclude, сколько вам нужно. Чтобы команда выглядела аккуратно, вы можете указать файлы и каталоги в опции --exclude, используя фигурные скобки. Разделяйте шаблоны запятой.
Например, мы можем сократить приведенную выше команду следующим образом:
1 | rsync -av --exclude={'*.txt','dir3','dir4'} sourcedir/ destinationdir/ |
Вывод показывает, что перечисленные файлы и каталоги исключены из передачи.
Исключение файлов и каталогов из списка
Когда вам нужно исключить большое количество различных файлов и каталогов, вы можете использовать флаг rsync --exclude-from. Для этого создайте текстовый файл с именами файлов и каталогов, которые вы хотите исключить. Затем передайте имя этого файла в опцию --exlude-from.
Команда выглядит следующим образом:
1 | rsync -av --exclude-from={'list.txt'} sourcedir/ destinationdir/ |
Инструмент rsync пропускает все файлы и каталоги, которые вы перечислили в файле. Вы можете добавить любой шаблон, который мы использовали в этом руководстве.
Пример файла, который мы использовали в приведенной выше команде, содержит следующие шаблоны:
Заключение
Это руководство показало вам все примеры исключения rsync, необходимые при передаче данных с помощью этого инструмента. Вы можете комбинировать шаблоны для настройки команды и исключения нескольких файлов и каталогов с помощью rsync.