Как исключить файлы и каталоги с помощью Rsync

How to Exclude Files and Directories with Rsync

21 Июня 2020 | Терминал

В этом руководстве мы покажем вам, как исключить файлы и каталоги с помощью 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/ 
исключить-file.txt
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 .


    Комментарии

    Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Загрузка комментариев...