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

12 set 2022 2 min di lettura
Как исключить файлы и папки (каталоги) с помощью Rsync в Linux
Indice dei contenuti

Введение

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.

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.