Rsync (расшифровывается как удаленная синхронизация) – очень мощная утилита командной строки для локальной и удаленной синхронизации файлов и каталогов. Он предустановлен в большинстве дистрибутивов Linux. Это одна из лучших утилит для резервного копирования и синхронизации файлов и каталогов в нескольких местах. Лучшее в rsync заключается в том, что он минимизирует объем данных, копируемых в удаленное место, путем копирования только тех данных, которые были изменены. Есть еще одна замечательная особенность rsync, которую мы собираемся обсудить сегодня; это исключает файлы или каталоги из синхронизации. Это чрезвычайно полезно во время резервного копирования, когда вы не хотите копировать один или несколько файлов или каталогов.
Мы покажем вам, как исключить файл или каталог в rsync, используя различные примеры. Представленные здесь примеры были протестированы на Ubuntu 20.04 LTS, однако они также действительны для других дистрибутивов Linux с установленным rsync.
Исключить определенный файл
При синхронизации каталога вы можете исключить определенный файл, расположенный внутри него. Вы можете сделать это с помощью опции –exclude, за которой следует имя файла, заключенное в запятую.
Синтаксис команды будет:
$ rsync -a --exclude ‘file_name’ source_directory/ destination_directory/
Здесь опция используется для рекурсивной синхронизации.
Например, чтобы исключить файл с именем sample.txt из источника при синхронизации src_dir и dest_dir, команда будет выглядеть так:
$ rsync -a --exclude ‘sample.txt’ src_dir/ dest_dir/
Исключить конкретный каталог
Чтобы исключить конкретный каталог (включая его подкаталоги) из источника при синхронизации исходного и целевого каталогов, используйте следующий синтаксис:
$ rsync -a --exclude ‘directory_name’ src_dir/ dest_dir/
Например, чтобы исключить каталог с именем sampledir при синхронизации src_dir и dest_dir, команда будет выглядеть так:
$ rsync -a --exclude ‘sampledir’ src_dir/ dest_dir/
Если вы хотите исключить содержимое каталога, но не сам каталог, используйте имя каталога, за которым следует / *:
$ rsync -a --exclude 'sampledir/* ' src_dir/ dest_dir/
Приведенная выше команда скопирует только каталог в место назначения, но не его содержимое.
Исключить несколько файлов или каталогов
Чтобы исключить несколько файлов или каталогов во время процесса синхронизации, укажите каждый из них следующим образом:
$ rsync -a --exclude 'file_name' --exclude 'directory1 --exclude 'directory2' src_dir/ dest_dir/
Вместо того, чтобы указывать параметр –exclude отдельно для каждого файла или каталога, вы можете использовать один параметр –exclude, указав все файлы или каталоги в фигурных скобках.
$ rsync -a --exclude={'file_name' ,'directory1’,'directory2'} src_dir/ dest_dir/
Другой вариант исключения нескольких файлов или каталогов – перечислить их в файле и затем передать имя файла параметру –exclude-from:
Здесь «list» содержит имя файла и каталогов, которые мы хотим исключить. Эта команда синхронизирует src_dir с dest_dir, исключая файлы и каталоги, упомянутые в файле «list».
Исключить файлы или каталоги, соответствующие шаблону
С помощью rsync вы также можете исключить файлы или каталоги, соответствующие определенному шаблону. Например, при синхронизации каталога вы можете исключить все файлы с расширением .txt. В этом случае команда будет выглядеть так:
$ rsync -a --exclude ‘*.txt’ src_dir/ dest_dir/
Исключить файл по размеру
С помощью rsync вы можете исключать файлы по их минимальному или максимальному размеру. Здесь мы не будем использовать параметр –exclude, но будем использовать параметры –max-size=<size in MB> или –min-size==<size in MB> в зависимости от максимального и минимального размера соответственно.
Вот список нашего src_dir, который показывает имена файлов вместе с их размерами в МБ.
Допустим, мы хотим синхронизировать все файлы с dest_dir, кроме тех, размер которых превышает 100 МБ. В этом случае команда будет такой:
$ rsync -av --max-size=100m src_dir/ dest_dir/
Точно так же, чтобы исключить файлы, размер которых меньше определенного, скажем, 50 МБ, команда будет выглядеть так:
$ rsync -av --min-size=50m src_dir/ dest_dir/
Заключение
Вот и все! В этом посте мы обсудили различные примеры исключения файла или каталога в rsync. Мы показали, как исключить один файл или каталог, несколько файлов и каталогов, файлы, соответствующие определенному шаблону, и файлы на основе их минимального/максимального размера.