Как исключить файлы и каталоги с помощью Rsync
Как исключить файлы и каталоги с помощью Rsync
How to Exclude Files and Directories with Rsync
В этом руководстве мы покажем вам, как исключить файлы и каталоги с помощью rsync.

Rsync - это быстрая и универсальная утилита командной строки, которая синхронизирует файлы и папки между двумя местами удаленной оболочки.
С Rsync вы можете зеркалировать данные, создавать инкрементные резервные копии и копировать файлы между системами. При копировании данных вы можете исключить один или несколько файлов или каталогов на основе их имени или местоположения.
Прежде чем вы начнете
Вы должны иметь базовые знания о том, как работает rsync .
В приведенных ниже примерах мы будем использовать rsync с -a
опцией,. Это говорит rsync о рекурсивной синхронизации каталогов, передаче специальных и блочных устройств и сохранении символических ссылок, времени модификации, группы, владельца и прав доступа.
При исключении файлов или каталогов вам необходимо использовать их относительные пути к исходному каталогу.
Существует два варианта указания файлов и каталогов, которые вы хотите исключить:
- Из командной строки , используя
--exclude
опцию. - Из файла , используя
--exclude-from
опцию.
Исключить определенный файл
Чтобы исключить конкретный файл, передайте относительный путь к файлу --exclude
опции.
В следующем примере файл src_directory/file.txt
не будет передан:
rsync -a --exclude 'file.txt' src_directory/ dst_directory/
Исключить конкретный каталог
Исключение определенного каталога аналогично исключению файла, просто передайте относительный путь к каталогу для --exclude
опции, как показано ниже:
rsync -a --exclude 'dir1' src_directory/ dst_directory/
Если вы хотите исключить содержимое каталога, но не сам каталог, используйте dir1/*
вместо dir1
:
rsync -a --exclude 'dir1/*' src_directory/ dst_directory/
Исключить несколько файлов или каталогов
Чтобы исключить несколько файлов или каталогов, просто укажите несколько --exclude
параметров:
rsync -a --exclude 'file1.txt' --exclude 'dir1/*' --exclude 'dir2' src_directory/ dst_directory/
Если вы предпочитаете использовать один --exclude
параметр, вы можете перечислить файлы и каталоги, которые вы хотите исключить, в фигурных скобках, {}
разделенных запятой, как показано ниже:
rsync -a --exclude={'file1.txt','dir1/*','dir2'} src_directory/ dst_directory/
Если число файлов и / или каталогов, которые вы хотите исключить, велико, вместо использования нескольких --exclude
опций вы можете указать файлы и каталоги, которые вы хотите исключить, в файле и передать файл --exclude-from
опции.
Команда ниже делает то же самое, что и выше:
rsync -a --exclude-from='exclude-file.txt' src_directory/ dst_directory/
file1.txt
dir1/*
dir2
Исключить несколько файлов или каталогов на основе шаблона
С rsync вы также можете исключить файлы и каталоги на основе шаблона, соответствующего имени файла или каталога.
Например, чтобы исключить все .jpg
файлы, которые вы запускаете:
rsync -a --exclude '*.jpg*' src_directory/ dst_directory/
Немного сложнее исключить все другие файлы и каталоги, кроме тех, которые соответствуют определенному шаблону. Допустим, вы хотите исключить все другие файлы и каталоги, кроме файлов, заканчивающихся на .jpg
.
Одним из вариантов является использование следующей команды:
rsync -a -m --include='*.jpg' --include='*/' --exclude='*' src_directory/ dst_directory/
При использовании нескольких параметров включения / исключения применяется первое правило соответствия.
--include='*.jpg'
- Сначала мы включаем все.jpg
файлы.--include='*/'
- Затем мы включаем все каталоги вsrc_directory
каталоге. Без этого rsync будет копировать только*.jpg
файлы в каталоге верхнего уровня.-m
- Удаляет пустые каталоги.
Другой вариант - перенаправить вывод find
команды в rsync:
find src_directory/ -name "*.jpg" -printf %P\\0\\n | rsync -a --files-from=- src_directory/ dst_directory/
-printf %P\\0\\n
- удалитsrc_directory/
из пути к файлу.--files-from=-
- означает включать только файлы из стандартного ввода (файлы, переданные из команды find).
Вывод
Из этого руководства вы узнали, как исключать файлы и каталоги при передаче данных с помощью Rsync. Еще много информации о Rsync можно найти на странице руководства пользователя Rsync .