Введение
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
.
Следующая команда делает то же самое, что и выше:
nano exclude-file.txt
Напишите список файлов и папок, которые вы хотите исключить:
file1.txt
dir1/*
dir2
Затем выполните команду, указав файл:
rsync -a --exclude-from='exclude-file.txt' src_directory/dst_directory/
Исключить несколько файлов или каталогов на основе шаблона
С помощью 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.