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
все файлы.jpg
.-
--include='*/'
— Затем мыsrc_directory
все каталоги внутри каталога в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 .