Exclude rsync example: How to use Rsync to exclude Files and Directories in Data Transfer

Содержание

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

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/

 

exclude-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.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Rsync: объединение ‘—files-from ‘ и ‘—exclude’ не работает

Вы можете объединить --files-from и --exclude , но это не так просто, как можно было бы подумать. (TL;DR? Перейти к концу.)

Рассмотрим простой пример. Вот настройка

mkdir -p dst src/a src/b/c
n=1
for d in $(find src -type d)
do
    ps -ef > "$d"/file$n.txt
    n=$((n+1))
done

Результатом является это дерево каталогов, которое мы будем использовать для наших примеров:

src/file1.txt
src/a/file2.txt
src/b/file3.txt
src/b/c/file4.txt

Используя rsync в тривиальном случае, мы получаем все, как и ожидалось:

rsync -av --dry-run src/ dst/
file1.txt
a/
a/file2.txt
b/
b/file3.txt
b/c/
b/c/file4.txt

Используя rsync --exclude b , вы можете видеть, что мы успешно исключаем b . На самом деле здесь происходит то, что, поскольку b больше не рассматривается, ни один из файлов под b не найден и не скопирован:

rsync -av --dry-run --exclude b/ src/ dst/
file1.txt
a/
a/file2.txt

Проблема заключается в том , что при предоставлении списка файлов, включающего записи под b, применяется исключение самого b , но файлы под ним не соответствуют предложению --exclude b и поэтому включены:

find src | rsync -av --dry-run --files-from=- --exclude b/ . dst/
src/
src/file1.txt
src/a/
src/a/file2.txt
src/b/
src/b/file3.txt
src/b/c/
src/b/c/file4.txt

Решение состоит в том, чтобы указать в предложении --exclude , что не только b , но и все его потомки должны быть исключены:

find src | rsync -av --dry-run --files-from=- --exclude b/ --exclude 'b/**' . dst/
src/
src/file1.txt
src/a/
src/a/file2.txt

В вашем случае у вас также есть ряд других проблем с вашей командой. Вот несколько вариантов, которые могут работать, в зависимости от того, что на самом деле находится в списках файлов:

rsync -azvv --no-r \
    --include-from '/home/user/BACKUP_MNGMT/include-list.txt' \
    --exclude-from '/home/user/BACKUP_MNGMT/exclude-list.txt' \
    -e ssh / [email protected]:/home/user/Backup

rsync -azvv \
    --files-from '/home/user/BACKUP_MNGMT/include-list.txt' \
    --exclude '/home/user/shared/BIG_DATA/**' \
    -e ssh / [email protected]:/home/user/Backup

основные примеры синхронизации файлов — powered by leo blog …

RSync это быстрый и чрезвычайно универсальный инструмент для синхронизации (копирования) файлов. Его самое основное преимущество это передача только изменившиеся части файла, а не файла целиком, что несомненно отражается на скорости копирования/синхронизации. А если при копировании произойдет какой-то сбой, то достаточно перезапустить команду и копирование будет продолжено с того же места.

RSync может копировать файлы локально на компьютере, с локальной машины на удаленную (к примеру на сервер) и наоборот. Этот инструмент очень удобно использовать для создания резервных копий своих файлов, так как имеет большое обилие опций и экономно пользуется ресурсами системы.

Сам сервис работает на SSH протоколе по умолчанию, но может работать и на собственном протоколе rsyncd, но обо всем по порядку.

Установка

По умолчанию rsync есть не везде, поэтому если вы получили ошибку «bash: rsync: command not found» — значит его нужно установить (как на локальной, так и на удаленной машине):

# для debian 
apt install rsync

# для centos
yum install rsync

Базовый синтаксис

rsync <опции> <что копируем с компьютера> <пользователь@хост:/куда_копируем>

Основные опции RSync

Ниже перечислены только основные опции, которые чаще всего помогали в работе. Я попытался разделить их на некоторые подгруппы для удобства их использования.

Базовые опции:

-n, --dry-run – что-то типа тестового режима, указывает не осуществлять никаких передач, а только сообщать о тех действиях, которые могли бы произойти.
-a, --archive – архивный режим, включает рекурсивное копирование и сохранение прав и владельца (эта опция включает в себя опции rlptgoD, они будут описаны следующими). Учтите, эта опция не сохраняет жесткие ссылки.
-r, --recursive – рекурсивный режим (копирование всех директорий и файлов в них).
-l, --links – копировать символьные ссылки как символьные ссылки.
-p, --perms – сохранять права для файлов. Без указания этой опции каждый новый файл получает те права доступа, что имеет исходный с учетом umask, действующей на приемной стороне, в то время как все другие (включая обновляемые) сохраняют свои уже существующие разрешения (это то же поведение, что имеют другие утилиты копирования файлов, такие как cp).
-t, --times – обновлять время модификации файла на приёмной стороне (при отсутствии этой опции или -a становиться неэффективной оптимизация передачи по времени изменения файлов).
-g, --group – сохранять группу пользователя. Если удаленная сторона не действует из-под супер-пользователя, то сохранятся только те значения групп, членом которых является пользователь приемной стороны, т.е. имеет значение имя группы, а не ее id.
-o, --owner – сохранять владельца на приемной стороне в точности с оригиналом. На большинстве систем только супер-пользователь имеет право устанавливать владельца файла. Нужно заметить, что если удаленный демон действует в chroot-окружении, то подразумевается наличие параметра --numeric-ids (он описан ниже), потому что на удаленной стороне в этом случае нет доступа к именам пользователей в /etc/passwd.
-D, --devices – сохранять файлы устройств (root only).

Работа с файлами:

-u, --update – не перезаписывать более новые файлы: указывает пропускать любые файлы, уже существующие на приемной стороне с более поздней датой, чем у исходных файлов.
--delete – удалять файлы, которых нет в источнике (полезно для создания точной копии).
--ignore-errors – продолжать копирование и удаление после появления ошибок (При удалении (--delete) форсирует процесс и игнорирует любые ошибки, даже ошибки ввода-вывода.)
--exclude – исключить файлы (подробно описано ниже).
--include – не исключать файлы (подробно описано ниже).
-F – опция которая заставляет искать файл .rsync-filter, в котором настраиваются фильтры (exclude/include). Если опция указана дважды то будет исключен и сам файл .rsync-filter.
-x, --one-file-system – не переходить границ файловой системы при рекурсивном копировании. Это полезно при необходимости копирования только одной файловой системы.
-R, --relative – использовать относительные пути при создании символических ссылок. Это значит, что посылаются полные пути, указанные в командной строке, а не последние части имен файлов. На практике это полезно, когда Вам нужно послать несколько различных каталогов за раз.
-H, --hard-links – пересоздать жесткие ссылки на конечной стороне в соответствии с тем, что имеется на исходной. Без этого параметра жесткие ссылки обрабатываются как обычные файлы.
-L, --copy-links – Если обнаружена символьная ссылка, то на приемную сторону копируется файл, на который она указывает, а не такая же символьная ссылка.
--numeric-ids – не транслировать имена владельца и группы в цифровые UID и GID, оставить на удалённой стороне номера как есть.
Вместо имен групп и пользователей посылаются их числовые id и ставятся в соответствие друг другу на обоих концах.
По умолчанию rsync использует имена групп и пользователей для определения владельца файлов. Специальные uid 0 и gid 0 никогда не отображаются через имена пользователей/групп, даже если не указана --numeric-ids.
Если исходная система работает в ограниченном chroot-окружении или если пользователь или группа не существуют на приемной стороне, то используются исходные числовые id.
-m, --prune-empty-dirs – не копировать пустые директории. 

Настройка синхронизации/подключения/передачи файлов:

-c, --checksum – использование сверки по контрольным суммам, а не по времени изменения и размеру файлов.
--size-only – сверять только размер файлов (по умолчанию проверяется размер и время модификации).
-z, --compress – компрессия данных при передаче (реализуется gzip).
-e,--rsh="command" – опция позволяет выбрать альтернативный протокол подключения между удаленной и локальной машинами.
--max-size – максимальный размер файла для передачи.
--bwlimit — ограничение скорости для передачи файлов (Kbit/s).
--partial – По умолчанию rsync будет удалять все частично-переданные файлы в случае сбоя передачи. Если этот параметр указан, то rsync будет сохранять частично-переданные файлы, что может сократить время копирования при повторном запуске.
-P – данная опция включает в себя опцию --partial и --progress.

Отображение/результат:

--progress – выводить прогресс передачи файлов.
--stat – показать статистику передачи.
-v, --verbose – вывести подробную информацию о процессе: один -v будет выдавать список переданных файлов и итог в конце, два -v выдает детали о пропущенных файлах и более подробный итог, больше -v полезно для отладки.
-q, --quiet – минимальная информация.

Опции полезные для создания инкрементальных резервных копий:

-b, --backup – создавать резервные копии ранее существовавших файлов до начала копирования на принимающей стороне. По умолчанию файлам добавляется суффикс ~, а если указана директория (--backup-dir), то суффикс не добавляется.
--backup-dir=.. – указывает каталог, куда сохранять резервные копии.
--suffix=.. – опция позволяет указать свой суффикс.

Теперь пройдемся по базовым примерам.

Как скопировать/синхронизировать файлы у себя на компьютере

Вот так:

rsync -av /home/user/Downloads/files/ /home/user/Downloads/copyfiles

Данная команда копирует файлы (т.е. содержимое) из каталога /home/user/Downloads/TEMP/files/ в каталог /home/user/Downloads/TEMP/copyfiles.

Важный момент:

  • если в конце пути до источника (каталога) нет слэша, то будет скопирован сам каталог (в примере выше это files).
  • если слэш указан, то будет скопировано содержимое каталога (т.е. то, что внутри files, из примера выше)

В случае необходимости скопировать несколько каталогов и файлов за раз в каталог, которого еще не существует, можно выполнить эту команду:

rsync -av ./2021 ./logo.svg.png ./copy2021 ./copydir

Находясь в нужном каталоге, мы скопировали каталог 2021, файл logo.svg.png и еще один каталог copy2021 в несуществующий ранее каталог copydir.

Вот как это выглядит наглядно:

rsync -av ./2021 ./logo.svg.png ./copy2021 ./copydir
sending incremental file list
created directory ./copydir
logo.svg.png
2021/
2021/filefromsrv
2021/filestorage.png
2021/login.png
2021/mainweb.png
2021/motiondetection.png
2021/motioneye-movies.png
2021/motioneye-recordetmovies.png
copy2021/
copy2021/just-file.txt

sent 723,033 bytes  received 349 bytes  1,446,764.00 bytes/sec
total size is 721,629  speedup is 1.00

Получается это не плохая альтернатива cp 🙂

Как скопировать/синхронизировать с компьютера на удаленный сервер

Вот так

Важно указывать полный путь на удаленном сервере, иначе rsync попытается скопировать каталог «2021» в корень удаленного сервера.
Еще важно указывать полный путь до удаленного сервера, так как, к примеру, копируя файл «file.txt» на сервер указав путь /home/user/somedir, каталог somedir не будет создан, вместо этого файл file.txt скопируется на сервер под именем somedir. Чтобы избежать этого используйте путь полный путь /home/user/somedir/.

Если мы хотим немного сжать файлы при передачи (к примеру у нас медленный интернет), можно использовать ключ -z:

Но важно понимать, что сжатие имеет смысл использовать там где это нужно, так как в новых версиях ssh уже использует сжатие передаваемых данных, тратить ресурсы CPU не стоит, особенно на слабых машинах или NAS серверах.

Как скопировать/синхронизировать с удаленного сервера на компьютер

Вот так:

В данном примере мы копируем файл filefromsrv в каталог, в котором находимся.

Как указать другой порт ssh и ключ?

С помощью опции -e (она же —rsh). Вот как скопировать файл с компьютера на сервер у которого не стандартный ssh порт:

А вот как можно указать ключ авторизации и порт:

rsync -av -e "ssh -p 2013 -i ~/.ssh/id_rsa" ./filefromsrv  [email protected]:/home/user/mydir/

Кстати, если мы настроим ssh алиас, то мы можем копировать файлы не указывая лишних ключей.

Пример конфига:

$ cat ~/.ssh/config
Host srv
   HostName 10.10.20.7
   Port 2013
   User user

Пример команды:

rsync -av ./filefromsrv srv:/home/user/somedir/

Я хочу видеть прогресс копирования/синхронизации

Стоит иметь в виду, что по умолчанию rsync копирует файлы без какого-либо вывода.

В примерах выше я использую ключ -v для того, чтобы видеть какие файлы были скопированы и получить некий отчет о проделанных действиях. Вот пример:

rsync -av ./somedir [email protected]:/home/leo/
sending incremental file list
somedir/
somedir/Screenshot from 2021-01-22 17-42-17.png
somedir/Screenshot from 2021-01-24 02-17-17.png

sent 1,996,838 bytes  received 58 bytes  3,993,792.00 bytes/sec
total size is 2,041,319  speedup is 1.02

Если мы хотим видеть наиболее интересный вывод, то нам в этом поможет ключ —progress. Вот пример:

rsync -aP ./somedir [email protected]:/home/user/
sending incremental file list
somedir/
somedir/Screenshot from 2021-01-22 17-42-17.png
        194,291 100%   51.35MB/s    0:00:00 (xfr#1, to-chk=1/3)
somedir/Screenshot from 2021-01-24 02-17-17.png
      1,847,028 100%   21.22MB/s    0:00:00 (xfr#2, to-chk=0/3)

Некоторые могут советовать ключ -P, но имейте в виду, -P включает в себя ключ —partial и —progress одновременно (что в целом не так страшно).

Как ограничить скорость передачи файлов?

Нужно указать опцию —bwlimit=SPEED, где SPEED это скорость в Кбайт в секунду:

Полезно бывает на слабом интернете с большими файлами.

Как исключить некоторые файлы или включить определенный тип файлов?

В rsync можно создавать достаточно гибкие исключения, например, делая резервную копию домашней директории на linux мы не ходим копировать разный кеш или содержимое корзины. Вот пример, в котором я исключаю две директории:

rsync -av --exclude={'user/.local/share/Trash','user/.cache'} /home/user [email protected]:/home/user/bkp/

Конечно можно указать одну директорию:

Еще мы можем исключить файлы с определенным расширением:

Саму опцию мы можем использовать несколько раз:

rsync -av --exclude="*.tmp" --exclude="tmp/*" --exclude="*~" /var/www/site [email protected]:/home/user/bkp/

Для копирования определенного типа файлов (да и не только) мы можем использовать опцию —include. Используется она точно так же, как и exclude. Вот пример, в котором я загружаю на сервер только все файлы с расширением .sql:

Исключения с помощью .rsync-filter

Для более гибкой настройки копирования (в случае регулярного копирования это будет очень полезно) все исключения/включения можно оформить в файле .rsync-filter (это появилось в более поздних версиях rsync).

Попробую объяснить подробно на примере, как и что мы можем исключать (спасибо этому блогу за хорошее описание).
Допустим, у меня есть такой каталог (somedir), в котором я хочу исключить (красная стрелка) или оставить (зеленая стрелка) некоторые файлы/каталоги:

Ниже приведен один из примеров настройки исключений в файле .rsync-filter с комментариями:

cat .rsync-filter 
# исключаем только каталог .cache (не будут исключены каталоги work/lo*/.cache и dir2/.cache)                                                                        
- /.cache
# исключаем все каталоги Trash во всех папках
- /**/Trash/
# исключаем каталог Cache в каталогах .mysoft/soft*/
- /.mysoft/*/Cache
# исключаем файл pass.md
- pass.md
# исключаем все файлы с расширением .tmp
- *.tmp
# исключаем весь каталог example
- /example/
# Оставляем каталог Trash в каждом каталоге work/lo*/..
+ /work/**/Trash/

Для того, чтобы rsync заметил файл .rsync-filter, достаточно указать опцию -F:

rsync -avF ./somedir 10.10.20.15:/home/leo/

В итоге на сервер будут скопированы только эти файлы:

Кстати, если мы не хотим чтобы сам .rsync-filter не копировался, то -F нужно будет указать дважды

Другие полезные опции

—delete /

—delete-after / —del (—delete_during)

Если мы делаем ежедневные резервные копии и не хотим засорять удаленный сервер лишними файлами (которых уже нет в источнике), то мы можем использовать опцию —delete:

В результате будет удален файл, которого больше нет в директории источника (в somedir):

rsync -avz -e "ssh -p 2013" --delete ./somedir [email protected]:/home/bkp/
[email protected]'s password: 
sending incremental file list
deleting somedir/lolo
somedir/

sent 159 bytes  received 77 bytes  67.43 bytes/sec
total size is 2,041,319  speedup is 8,649.66

По умолчанию, rsync сначала выполняет удаление файлов перед копированием для уверенности, что хватит свободного места на приемной стороне (т.е. использует по умолчанию —delete-before). Если мы хотим удалять файлы после копирования, используйте параметр —delete-after.

Если мы хотим хотим удалять файлы в процессе передачи, а не перед, то можно использовать опцию —del (—delete_during). Это поможет сэкономить немного ресурсов и времени.

Кстати, это не все «delete» параметры, которые есть, вот их полный список с кратким описанием:

--del – an alias for --delete-during
--delete – delete extraneous files from dest dirs
--delete-before – receiver deletes before transfer (default)
--delete-during – receiver deletes during xfer, not before
--delete-delay – find deletions during, delete after
--delete-after – receiver deletes after transfer, not before
--delete-excluded – also delete excluded files from dest dirs

А если вам по какой-то причине не нужно обновлять файлы на принимающем сервере, вместо опции —del.. можно использовать опцию —ignore-existing.

—no-perms —no-owner —no-group

Иногда нам может потребоваться не переносить атрибуты (права файлов, пользователя и группу пользователя). Для этого мы можем воспользоваться опциями —no-p —no-o —no-g (оно же —no-perms —no-owner —no-group):

rsync -avz -e "ssh -p 2013" --no-p --no-o --no-g ./somedir 

Важно соблюдать порядок (особенности работы «—no-OPTION» в rsync).

—inplace

По умолчанию rsync, при копировании существующего файла создает его новую версию, а потом заменяет старый файл на новый. Это сделано для того, чтобы исходный файл не пострадал в случае каких-то перебоев. Данная опция позволяет изменить это поведение таким образом, чтобы rsync сразу начал перезапись старого файла. Опция полезна при копировании больший файлов на одном компьютере:

rsync -av --inplace ./Видео.mp4 ./vidinplace.mp4

-W, —whole-file

Эта опция будет полезна, если мы копируем файлы с нагруженного или слабого сервера, так как она отключает дифференциальный алгоритм rsync’а и с ним весь файл передается как есть, целиком, не тратя время CPU на вычисления.

Что в итоге?

Я постарался описать наиболее частые примеры использования rsync, и сказу сразу: это только минимум того, что может эта утилита.

Если вы где-то нашли ошибку, или есть еще какие-то интересные способы использования rsync — пишите, я добавлю их в статью ;).

Источники:

How copy and exclude files in Linux?

How do I exclude a file in Linux?

When you need to exclude a large number of different files and directories, you can use the rsync –exclude-from flag. To do so, create a text file with the name of the files and directories you want to exclude. Then, pass the name of the file to the –exlude-from option.

How do I copy all files except one in Linux?

The best and simple way is using find . Go to the source directory. Then use the following commands. This copies all files except “*.

How do I copy a selected file in Linux?

Method 1 – Copy specific file types while preserving directory structure using “find” and “cp” or “cpio” commands

  1. find – command to find files and folders in Unix-like systems.
  2. the dot (.) …
  3. -iname ‘*. …
  4. -exec cp – execute the ‘cp’ command to copy files from source to destination directory.

19 мар. 2020 г.

How do I copy a folder in Linux without files?

Linux : Copy only directory structure without copying content

  1. mkdir /where/ever/you/want.
  2. cd /from/where/you/want/to/copy/directory/structure.
  3. find * -type d -exec mkdir /where/you/want/{} ;

26 июл. 2010 г.

Which command will find all the files without permission 777?

The -perm command line parameter is used with find command to search files based on permissions. You can use any permission instead of 777 to find files with that permissions only. The above command will search all files and directories with permission 777 under the specified directory.

How do I use rsync?

Copy a File or Directory from Local to Remote Machine

To copy the directory /home/test/Desktop/Linux to /home/test/Desktop/rsync on a remote machine, you need to specify the IP address of the destination. Add the IP address and the destination after the source directory.

What does cp command do in Linux?

cp stands for copy. This command is used to copy files or group of files or directory. It creates an exact image of a file on a disk with different file name.

Is rsync faster than CP?

rsync is much faster than cp for this, because it will check file sizes and timestamps to see which ones need to be updated, and you can add more refinements. … You can also use rsync to copy or sync files to a remote machine, or make is run as a daemon.

What is Shopt Extglob?

As you can guess, it stands for extended globbing . This option allows for more advanced pattern matching. From man bash : extglob If set, the extended pattern matching features described above under Pathname Expansion are enabled.

How do I copy and paste in Linux terminal?

Press Ctrl + C to copy the text. Press Ctrl + Alt + T to open a Terminal window, if one is not already open. Right-click at the prompt and select “Paste” from the popup menu. The text you copied is pasted at the prompt.

How do I copy directories in Linux?

In order to copy a directory on Linux, you have to execute the “cp” command with the “-R” option for recursive and specify the source and destination directories to be copied. As an example, let’s say that you want to copy the “/etc” directory into a backup folder named “/etc_backup”.

How do you move files in Linux?

To move files, use the mv command (man mv), which is similar to the cp command, except that with mv the file is physically moved from one place to another, instead of being duplicated, as with cp. Common options available with mv include: -i — interactive.

How do I copy a folder tree without files?

To Copy Folder Structure without Copying Files in Windows 10,

  1. Open a Command Prompt.
  2. Type xcopy source destination /t /e .
  3. Replace source with the path that contains your current folder hierarchy with files.
  4. Replace destination with the path that will store the empty folder hierarchy(the new one).

4 сент. 2019 г.

How do I find the directory structure in Linux?

If you run the tree command without any arguments, the tree command will display all contents of the current working directory in a tree-like format. Upon completion of listing all files/directories found, tree returns the total number of files and/or directories listed.

How do I copy a directory tree only structure?

Using the XCopy command

The built-in XCopy command in Windows can copy the directory or directory tree (i.e., recursively). The switches /T /E make sure that only the folders (including empty folders) are copied without copying the files.

Как использовать Rsync для исключения файлов и каталогов при передаче данных

Введение

Rsync — полезный инструмент командной строки Linux, который синхронизирует и копирует файлы и каталоги. Вы можете использовать этот инструмент для локальной синхронизации данных между каталогами и дисками или между двумя удаленными компьютерами.

Основные команды rsync в Linux синхронизируют все из указанного вами места. Во многих сценариях резервного копирования вы можете исключить определенные файлы, каталоги или типы файлов.

Следуйте примерам в этом руководстве, чтобы узнать, как исключить файлы или каталоги с помощью rsync. Мы перечислим наиболее распространенные варианты использования exclude для повседневного использования rsync.

Предварительные требования

  • Пользователь с sudo или root привилегиями
  • Доступ к командной строке / окну терминала
  • Rsync, установленный в вашей системе

Как работает rsync Exclude Option

Параметр --exclude с командой rsync использует относительные пути к исходному каталогу.Добавьте параметр --exclude к команде rsync , а затем укажите относительный путь к каталогу или файлам.

Базовый синтаксис для опции исключения rsync выглядит так:

  rsync [ОПЦИИ] --exclude 'file_or_directory' источник / назначение /  

Замените source / именем каталога, который вы хотите использовать в качестве источника для передачи данных в другое место.

Замените destination / на имя каталога, которое rsync будет использовать в качестве целевого расположения для ваших данных.Если каталог не существует, rsync создаст его для вас и перенесет файлы в этот каталог.

Для резервного копирования файлов в удаленное место следуйте нашему другому руководству, чтобы узнать, как копировать или передавать файлы с помощью rsync через SSH.

Примечание: Завершающая косая черта (/) в исходном каталоге изменяет поведение команды rsync .

  • Если вы не используете завершающую косую черту, исходный каталог копируется в целевой каталог, а затем содержимое каталога.
  • Когда вы используете завершающую косую черту, rsync копирует только содержимое исходного , а не создает дополнительный уровень каталога.

Исключить определенный файл

В приведенных ниже примерах исключения rsync мы будем использовать параметры -a (, архив ) и -v ( подробный ) ( -av ). Параметр -a синхронизирует каталоги рекурсивно, сохраняя разрешения, символические ссылки, права собственности и настройки группы.Флаг -v является необязательным и отображает ход выполнения и состояние команды rsync.

Чтобы исключить файл при передаче содержимого папки с помощью rsync, укажите файл и относительный путь.

Например:

  rsync -av --exclude 'testfile1.txt' sourcedir / destinationdir /  

Эта команда позволяет копировать файлы в destinationdir из sourcedir, но исключить testfile1.текст.

Как видно из выходных данных, testfile1.txt отсутствует в списке.

Для этого выполните следующую команду:

  sudo rm -rf каталог назначения  

Исключить определенный каталог

Теперь, когда вы знаете, как использовать команду rsync --exclude file, используйте инструмент таким же образом, чтобы исключить каталог.

Укажите каталог, который вы хотите исключить (вместо имени файла):

  rsync -av --exclude 'dir1' sourcedir / destinationdir /  

Эта команда скопировала содержимое sourcedir в destinationdir и исключила dir1 , как показано в выходных данных.

Исключение файлов или каталогов на основе шаблона

Используйте звездочку * (подстановочный знак) при определении имени файла или каталога, чтобы исключить все, что соответствует шаблону.

От

до исключить файлы, которые начинаются с test , выполните эту команду:

  rsync -av --exclude 'test *' sourcedir / destinationdir /  

Все файлы и каталоги, соответствующие этому шаблону, будут исключены из передачи.

Вы также можете использовать подстановочный знак , чтобы исключить все каталоги, заканчивающиеся определенным шаблоном .

Выполните эту команду, чтобы исключить все каталоги, заканчивающиеся на 3:

  rsync -av --exclude '* 3' источник / каталог назначения /  

Вы можете использовать звездочку до и после шаблона, чтобы дополнительно уточнить критерий - исключить .

Исключить определенный тип файла

Инструмент rsync позволяет исключить определенные типы файлов при синхронизации данных.Используйте звездочку * , за которой следует расширение типа файла, который вы хотите исключить.

Например, вы можете создать резервную копию каталога, содержащего множество файлов .iso , резервное копирование которых не требуется.

В данном случае, чтобы исключить определенный тип файла. iso , запустите эту команду:

  rsync -av --exclude '* .iso' sourcedir / destinationdir /  

Выходные данные показывают, что rsync не передал .iso файлов. Мы добавили содержимое исходного каталога в изображение для сравнения.

Исключить файлы по размеру

Во время передачи файлов вы можете указать минимальный или максимальный размер файлов, которые вы хотите исключить. Если исходный каталог содержит много больших файлов, резервное копирование которых не требуется, используйте параметр --max-size = size_in_mb_or_gb . Замените size_in_mb_or_gb на желаемый размер.

Например, , чтобы исключить все файлы размером более 500 МБ, выполните эту команду:

  rsync -av --max-size = 500m sourcedir / destinationdir /  

С другой стороны, , чтобы исключить файлы, размер которых меньше определенного , используйте параметр --min-size = size_in_mb_or_gb .

Например, вы хотите перенести каталог с изображениями, но есть много файлов эскизов. Если размер всех ваших изображений превышает 1 МБ, вы можете исключить все файлы, размер которых меньше этого размера.

Для этого выполните следующую команду:

  rsync -av --min-size = 1 м sourcedir / destinationdir /  

Не используйте , --exclude rsync с опцией при определении минимального или максимального размера файла.

Исключить несколько файлов или каталогов

Добавить несколько параметров --exclude , чтобы исключить несколько файлов или каталогов.Вы можете комбинировать любые команды rsync --exclude folder и rsync --exclude file (s) для передачи только необходимых данных. Любую из команд, о которых мы ранее говорили, можно использовать в одной строке.

Следующая команда исключит все файлы с расширением .txt , а также каталоги dir3 и dir4 :

  rsync -av --exclude '* .txt' --exclude 'dir3' --exclude 'dir4' sourcedir / destinationdir /  

Вы можете добавить столько записей - исключая , сколько вам нужно.Чтобы команда оставалась аккуратной, вы можете указать файлы и каталоги в параметре --exclude , используя фигурные скобки. Разделите узоры запятой.

Например, мы можем сократить указанную выше команду следующим образом:

  rsync -av --exclude = {'*. Txt', 'dir3', 'dir4'} sourcedir / destinationdir /  

Выходные данные показывают, что перечисленные файлы и каталоги исключены из передачи.

Исключить файлы и каталоги из списка

Когда вам нужно исключить большое количество разных файлов и каталогов, вы можете использовать флаг rsync --exclude-from .Для этого создайте текстовый файл с именами файлов и каталогов, которые вы хотите исключить. Затем передайте имя файла параметру --exlude-from .

Команда выглядит так:

  rsync -av --exclude-from = {'list.txt'} sourcedir / destinationdir /  

Инструмент rsync пропускает все файлы и каталоги, перечисленные в файле. Вы можете добавить любой узор, который мы использовали в этом руководстве.

Файл примера, который мы использовали в приведенной выше команде, содержит следующие шаблоны:

Заключение

В этом руководстве показаны все примеры исключений rsync, которые могут понадобиться при передаче данных с помощью этого инструмента.Вы можете комбинировать шаблоны, чтобы настроить команду и исключить несколько файлов и каталогов с помощью rsync.

Как исключить Directory Rsync?

Rsync (расшифровывается как удаленная синхронизация) — очень мощная утилита командной строки для локальной и удаленной синхронизации файлов и каталогов. Он предустановлен в большинстве дистрибутивов Linux. Это одна из лучших утилит для резервного копирования и синхронизации файлов и каталогов в нескольких местах. Лучшее в rsync заключается в том, что он минимизирует объем данных, копируемых в удаленное место, путем копирования только тех данных, которые были изменены.Есть еще одна замечательная особенность rsync, которую мы собираемся обсудить сегодня; это исключает файлы или каталоги из синхронизации. Это чрезвычайно полезно во время резервного копирования, когда вы не хотите копировать один или несколько файлов или каталогов.

Мы покажем вам, как исключить файл или каталог в rsync, используя различные примеры. Представленные здесь примеры были протестированы на Ubuntu 20.04 LTS, однако они также действительны для других дистрибутивов Linux с установленным rsync.

Исключить определенный файл

При синхронизации каталога вы можете исключить определенный файл, расположенный внутри него.Вы можете сделать это с помощью опции –exclude, за которой следует имя файла, заключенное в запятую.

Синтаксис команды будет:

$ rsync -a —exclude «имя_файла» исходный_каталог / целевой_каталог /

Здесь вариант используется для рекурсивной синхронизации.

Например, чтобы исключить файл с именем sample.txt из источника при синхронизации src_dir и dest_dir , команда будет выглядеть так:

$ rsync -a —exclude ‘sample.txt ‘src_dir / dest_dir /

Исключить определенный каталог

Чтобы исключить определенный каталог (включая его подкаталоги) из источника при синхронизации исходного и целевого каталогов, используйте следующий синтаксис:

$ rsync -a —exclude «имя_каталога» 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 ‘имя_файла’ —exclude ‘directory1 —exclude’ directory2 ‘src_dir / dest_dir /

Вместо того, чтобы указывать параметр –exclude отдельно для каждого файла или каталога, вы можете использовать один параметр –exclude , указав все файлы или каталоги в фигурных скобках.

$ rsync -a —exclude = {‘имя_файла’, ‘каталог1’, ‘каталог2’} src_dir / dest_dir /

Другой вариант исключения нескольких файлов или каталогов — перечислить их в файле и затем передать имя файла в параметр –exclude-from :

$ rsync -a —exclude-from ‘list’ src_dir / dest_dir /

Здесь «список» содержит имя файла и каталогов, которые мы хотим исключить. Эта команда синхронизирует src_dir с dest_dir, исключая файлы и каталоги, упомянутые в файле «list».

Исключить файлы или каталоги, соответствующие шаблону

С помощью rsync вы также можете исключить файлы или каталоги, соответствующие определенному шаблону. Например, при синхронизации каталога вы можете исключить все файлы с расширением .txt . Команда в этом случае будет:

$ rsync -a —exclude ‘* .txt’ src_dir / dest_dir /

Исключить файл по размеру

С помощью rsync вы можете исключать файлы по их минимальному или максимальному размеру.Здесь мы не будем использовать параметр –exclude, а использовать параметры –max-size = <размер в МБ> или –min-size == <размер в МБ> в зависимости от максимального и минимального размера соответственно.

Вот список нашего src_dir , который показывает имена файлов вместе с их размерами в МБ.

Допустим, мы хотим синхронизировать все файлы с dest_dir, кроме тех, размер которых превышает 100 МБ . В этом случае команда будет:

$ rsync -av —max-size = 100 м src_dir / dest_dir /

Аналогичным образом, чтобы исключить файлы, размер которых меньше определенного размера, скажем, 50 МБ, команда будет выглядеть так:

$ rsync -av —min-size = 50 м src_dir / dest_dir /

Заключение

Вот и все! В этом посте мы обсудили различные примеры исключения файла или каталога в rsync.Мы показали, как исключить один файл или каталог, несколько файлов и каталогов, файлы, соответствующие определенному шаблону, и файлы на основе их минимального / максимального размера.

Как исключить папку из rsync

Вы указываете абсолютных путей в своем списке исключений.

При использовании rsync все исключаемые (или включаемые!) Пути, начинающиеся с /, привязаны к «корню передачи ».

Корень передачи в данном случае — / home / chris .Если да:

rsync -Paz --exclude-from 'rsync-exclude.txt' / [email protected]:

… тогда ваши исключения должны работать (но вы скопируете все остальное в этой файловой системе!).

Но поскольку вы просто пытаетесь синхронизировать домашний каталог , а подкаталог / home / chris с именем "home / chris / Downloads" не найден, rsync не находит ничего подходящего.

Так что попробуйте удалить части / home / chris из вашего rsync-exclude.txt файл.

На самом деле вам нужна всего одна строка в файле:

  / Загрузки
  

Обратите внимание на , что если вы не укажете ведущие / и у вас есть другие каталоги с именем «Downloads» , они также будут исключены. Я предполагаю, что вы хотите исключить только ваш «верхний уровень» (относительно исходного каталога, также известного как «корень передачи»). Downloads directory, поэтому вам понадобится ведущий /.

САМЫЙ ПРОСТОЙ СПОСОБ (чтобы исключить только несколько путей)

Если вам нужно исключить только один каталог, просто сделайте это (избегая отдельного файла):

  rsync -Paz --exclude / Downloads / home / chris / [email protected]: LinuxHome
  

Вы также можете объединить в цепочку - исключить теги , например:

  rsync -Paz --exclude / Downloads --exclude '/ Something Else' --exclude .hiddenFile / home / chris / [email protected]: LinuxHome
  

Обратите внимание, что, поскольку косой черты нет, она исключает .hiddenFile из любой в каждом каталоге, который он копирует!

Но если у вас больше нескольких исключений, вам лучше использовать --exclude-from и файл.

Примечание

Я вижу, что вы все правильно поняли, но новичкам в rsync следует обратить внимание на косую черту в конце из / home / chris /

Процитируем справочную страницу rsync : «Вы можете думать, что конечный / в источнике означает« копировать содержимое этого каталога », а не« копировать каталог по имени ».«

Таким образом, если вы остановите эту конечную косую черту, вы получите каталог с именем chris в целевом каталоге, , содержащий все из / home / chris (кроме исходного каталога Downloads , конечно!) .

6 примеров rsync для исключения нескольких файлов и каталогов с помощью exclude-from

Rsync — очень мощный инструмент для создания резервных копий или синхронизации файлов и каталогов между двумя разными местоположениями (или серверами).

Вы уже знаете это, поскольку ранее мы представили вам практические примеры использования rsync.

В типичной ситуации резервного копирования вы можете исключить один или несколько файлов (или каталогов) из резервной копии. Вы также можете исключить определенный тип файла из rsync.

В этой статье с примерами объясняется, как игнорировать несколько файлов и / или каталогов во время rsync.

Сначала создайте образец структуры каталогов, как показано ниже (с некоторыми пустыми файлами), который можно использовать для целей тестирования.

 $ кд ~
$ mkdir -p источник / каталог1 / каталог2
$ mkdir -p источник / dir3
$ touch source / file1.txt
$ touch source / file2.txt
$ touch source / dir1 / dir2 / file3.txt
$ touch source / dir3 / file4.txt 

Приведенная выше команда создаст исходный каталог (в вашем домашнем каталоге) со следующей структурой.

 источник
- file1.txt
- file2.txt
- dir1
  - dir2
    - file3.txt
- dir3
  - file4.txt 

1. Исключить определенный каталог

Если вы не хотите синхронизировать каталог dir1 (включая все его подкаталоги) из источника в папку назначения, используйте параметр rsync –exclude, как показано ниже.

 $ пм-рф направление

$ rsync -avz --exclude 'dir1' источник / назначение /
создание списка файлов ... готово
созданный каталог dest
./
file1.txt
file2.txt
dir3 /
dir3 / file4.txt 

Убедитесь, что каталог dir1 не скопирован из исходного каталога в целевой каталог.

 $ найти направление
место назначения
пункт назначения / file2.txt
пункт назначения / file1.txt
пункт назначения / dir3
место назначения / каталог3 / файл4.txt 

2. Исключить несколько каталогов, соответствующих шаблону

В следующем примере будет исключен любой каталог (или подкаталоги) в источнике /, который соответствует шаблону «dir *»

 $ пм-рф направление

$ rsync -avz --exclude 'dir *' источник / назначение /
создание списка файлов ... готово
созданный каталог назначения
./
file1.txt
file2.txt 

Проверьте целевой каталог, чтобы убедиться, что в нем не скопированы каталоги, содержащие ключевое слово «dir».

 $ найти направление
место назначения
пункт назначения / file2.txt
назначение / file1.txt 

3. Исключить определенный файл

Чтобы исключить конкретный файл, используйте относительный путь к файлу в опции исключения, как показано ниже.

 $ пм-рф направление

$ RSync -avz --exclude 'dir1 / dir2 / file3.txt' источника / назначения /
создание списка файлов ... готово
созданный каталог назначения
./
file1.txt
file2.txt
dir1 /
dir1 / dir2 /
dir3 /
каталог3 / файл4.txt 

Проверьте целевой каталог, чтобы убедиться, что он не копировал конкретный файл (в этом примере dir1 / dir2 / file3.txt).

 $ найти направление
место назначения
пункт назначения / file2.txt
пункт назначения / file1.txt
пункт назначения / dir1
пункт назначения / каталог1 / каталог2
пункт назначения / dir3
назначение / dir3 / file4.txt 

4. Исключить путь всегда относительный

Если вы не будете осторожны, вы можете совершить эту ошибку.

В следующем примере параметр исключения, кажется, имеет полный путь (т.е.e /dir1/dir2/file3.txt). Но с точки зрения rsync путь исключения всегда относительный и будет рассматриваться как dir1 / dir2 / file3.txt. В приведенном ниже примере rsync будет искать dir1 в исходном каталоге (а не в корневом каталоге).

 $ rsync -avz --exclude '/dir1/dir2/file3.txt' источник / назначение / 

Итак, приведенная выше команда точно такая же, как следующая. Во избежание путаницы (и для облегчения чтения) не указывайте / перед исключаемым путем.

 $ rsync -avz --exclude 'dir1 / dir2 / file3.txt 'источник / назначение / 

5. Исключить определенный тип файла

Чтобы исключить определенный тип файла с определенным расширением, используйте соответствующий шаблон. Например, чтобы исключить все файлы с расширением .txt, выполните следующие действия.

 $ rsync -avz --exclude '* .txt' источник / назначение /
создание списка файлов ... готово
созданный каталог назначения
./
dir1 /
dir1 / dir2 /
dir3 / 

Проверьте целевой каталог, чтобы убедиться, что он не копирует *.txt файлы.

 $ найти направление
место назначения
пункт назначения / dir1
пункт назначения / каталог1 / каталог2
destination / dir3 

Примечание: Вышеупомянутое очень полезно, если вы хотите сделать резервную копию своего домашнего каталога, но исключить все те огромные файлы изображений и видео, которые имеют определенное расширение файла.

6. Исключить одновременно несколько файлов и каталогов

Если вы хотите исключить несколько файлов и каталогов, вы всегда можете указать несколько параметров исключения rsync в командной строке, как показано ниже.

 $ rsync -avz --exclude file1.txt --exclude dir3 / file4.txt источник / назначение / 

Подождите. Что, если бы у меня было много файлов, которые я хочу исключить из rsync?

Я не могу добавлять их в командную строку, используя несколько –exclude, что трудно читать, и сложно повторно использовать команду rsync в дальнейшем.

Итак, лучший способ — использовать параметр rsync –exclude-from, как показано ниже, где вы можете перечислить все файлы (и каталоги), которые вы хотите исключить из файла.

Сначала создайте текстовый файл со списком всех файлов и каталогов, резервные копии которых вы не хотите делать.Это список файлов и каталогов, которые вы хотите исключить из rsync.

 $ vim exclude-list.txt
file1.txt
dir3 / file4.txt 

Затем выполните rsync, используя параметр –exclude-from с файлом exclude-list.txt, как показано ниже.

 $ пм-рф направление

$ rsync -avz --exclude-from 'exclude-list.txt' источник / назначение /
создание списка файлов ... готово
созданный каталог назначения
./
file2.txt
dir1 /
dir1 / dir2 /
каталог1 / каталог2 / файл3.текст
dir3 / 

Проверьте каталог назначения, чтобы убедиться, что для файлов и каталогов, перечисленных в файле exclude-list.txt, нет резервных копий.

 $ найти направление
место назначения
пункт назначения / file2.txt
пункт назначения / dir1
пункт назначения / каталог1 / каталог2
место назначения / каталог1 / каталог2 / file3.txt
destination / dir3 

10 Команда Linux rsync для исключения файлов / каталогов

Rsync (удаленная синхронизация) — это наиболее часто используемая команда для удаленного и локального копирования и синхронизации файлов и каталогов в системах Linux / Unix.С помощью команды rsync вы можете удаленно и локально копировать и синхронизировать данные в каталогах, дисках и сетях, выполнять резервное копирование и зеркалирование данных между двумя машинами Linux.

Rsync — одна из самых полезных утилит для администратора сервера, но по умолчанию она синхронизирует все, что может раздражать, если ваше приложение создает много временных файлов. Вот как исключить файлы при использовании rsync.

Важные особенности команды rsync

  • Скорость: в первый раз rsync реплицирует весь контент между исходным и целевым каталогами.В следующий раз rsync передает в место назначения только измененные блоки или байты, что делает передачу очень быстрой.
  • Безопасность: rsync позволяет шифрование данных с использованием протокола ssh во время передачи.
  • Низкая пропускная способность: rsync использует сжатие и распаковку данных по блокам на передающей и принимающей стороне соответственно. Таким образом, полоса пропускания, используемая rsync, всегда будет меньше по сравнению с другими протоколами передачи файлов, такими как FTP.
  • Привилегии: Для установки и выполнения rsync не требуется никаких специальных привилегий.

Базовый синтаксис rsync очень прост и работает аналогично ssh, scp и cp.

  $ sudo параметры rsync источник назначения  
  • -v: подробный.
  • -r: рекурсивно копирует данные (но не сохраняет отметки времени и разрешения при передаче данных).
  • -a: режим архива, режим архива позволяет рекурсивно копировать файлы, а также сохраняет символические ссылки, права доступа к файлам, права собственности пользователей и групп и временные метки.
  • -z: сжать данные файла.
  • -h: удобочитаемый, вывод чисел в удобочитаемом формате.
  • -d: передавать каталоги без рекурсии -e: указать ssh как удаленную оболочку.

Сначала создайте образец структуры каталогов, как показано ниже (с некоторыми пустыми файлами), который можно использовать для целей тестирования.

  $ кд ~
  $ sudo mkdir -p источник / каталог1 / каталог2
  $ sudo mkdir -p источник / dir3
  $ sudo touch source / file1.txt
  $ sudo touch source / file2.текст
  $ sudo сенсорный источник / dir1 / dir2 / file3.txt
  $ sudo сенсорный источник / dir3 / file4.txt
  

Приведенные выше команды создадут исходный каталог (в домашнем каталоге) со следующей структурой. Чтобы увидеть структуру исходного каталога, введите команду ниже.

  $ sudo найти источник /  
  источник
  - file1.txt
  - file2.txt
  - dir1
    - dir2
      - file3.txt
  - dir3
    - file4.txt 
 

1) Исключить конкретный каталог

Сначала мы удаляем целевой каталог , если он существует, введя команду ниже.

  $ sudo rm -rf назначение  

Если мы не хотим синхронизировать dir3 и его подкаталоги из исходной папки в папку назначения, мы используем параметр rsync --exclude , как показано ниже.

  $ sudo rsync -avz --exclude 'dir3' источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude 'dir3' source / [email protected]: destination /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
file1.txt
file2.txt
dir1 /
dir1 / dir2 /
каталог1 / каталог2 / file3.txt

отправлено 307 байт получено 126 байт 866,00 байт / сек
общий размер 0 ускорение 0,00 
 

2) Исключить определенный файл

Если мы не хотим синхронизировать file3.txt из источника в папку назначения, мы вводим команду ниже.

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude 'dir1 / dir2 / file3.txt' источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude 'dir1 / dir2 / file3.txt' source / [email protected]: назначение /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
file1.txt
file2.txt
dir1 /
dir1 / dir2 /
dir3 /
dir3 / file4.txt

отправлено 338 байт получено 130 байт 936,00 байт / сек
общий размер 0 ускорение 0,00 
 

Например, в режиме реального времени, когда вы хотите rsync / var в каталог резервных копий, но не хотите включать кеш и папку tmp, которые обычно не содержат важного содержимого между перезапусками, вы можете использовать следующую команду:

  $ sudo rsync -aAXhv --exclude = {"/ var / cache", "/ var / tmp"} / var remoteuser @ 192.168.122.105: пункт назначения /  

3) Исключить определенный тип файла

Чтобы исключить конкретное с определенным расширением, мы используем соответствующий шаблон. Например, чтобы исключить все файлы, которые содержат .txt в качестве расширения, мы вводим команду ниже.

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude '* .txt' источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude '*.txt 'источник / [email protected]: пункт назначения /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
dir1 /
dir1 / dir2 /
dir3 /

отправлено 136 байт получено 65 байтов 402,00 байт / сек
общий размер 0 ускорение 0,00 
 

4) Исключить несколько каталогов, соответствующих шаблону

Мы исключим любой каталог (или подкаталог) под source / , который начинается с «dir»

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude 'dir *' источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ $ sudo rsync -avz --exclude 'dir *' источник / [email protected]: пункт назначения /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
file1.txt
file2.txt

отправлено 168 байт получено 91 байт 518,00 байт / сек
общий размер 0 ускорение 0,00 
 

5) Исключить одновременно несколько файлов и каталогов

Сначала создайте текстовый файл со списком всех файлов и каталогов, резервные копии которых вы не хотите делать.Это список файлов и каталогов, которые вы хотите исключить из rsync.

  $ sudo nano exclude-list.txt  
  file2.txt
  dir3 / file4.txt 
 

Затем выполните rsync, используя опцию --exclude-from с exclude-list.txt , как показано ниже.

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude-from 'exclude-list.txt' источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude-from 'exclude-list.txt' source / [email protected]: destination /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
file1.txt
dir1 /
dir1 / dir2 /
каталог1 / каталог2 / file3.txt
dir3 /

отправлено 277 байт принято 111 байт 776,00 байт / сек
общий размер 0 ускорение 0,00 
 

6) Исключить путь всегда относительный

Параметр исключения, похоже, имеет полный путь (например, /dir3/file4.txt).Но с точки зрения rsync путь исключения всегда относительный, и он будет рассматриваться как dir3 / file4.txt. В приведенном ниже примере rsync будет искать dir3 в исходном каталоге (а не в корневом каталоге).

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude '/dir3/file4.txt' источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude '/dir3/file4.txt' source / bobby @ 192.168.122.105: пункт назначения /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
file1.txt
file2.txt
dir1 /
dir1 / dir2 /
каталог1 / каталог2 / file3.txt
dir3 /

отправлено 334 байта получено 130 байтов 928,00 байт / сек
общий размер 0 ускорение 0,00 
 

Это похоже на команду ниже.

  $ sudo rsync -avz --exclude 'dir3 / file4.txt' источник / назначение /  

7) Исключить файлы из командной строки

также может исключать файлы непосредственно из командной строки, это полезно, когда вам нужно исключить меньшее количество файлов.Например, если мы хотим синхронизировать / source с целевым каталогом, но вы не хотите включать файлы file3.txt и file4.txt, мы можем использовать следующую команду.

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude = {"/ dir1 / dir2 / file3.txt", "/ dir3 / file4.txt"} source / destinaton /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude = {"/ dir1 / dir2 / file3.txt", "/ dir3 / file4.txt"} source / bobby @ 192.168.122.105: пункт назначения /  
  выход
отправка добавочного списка файлов
./
file1.txt
file2.txt
dir1 /
dir1 / dir2 /
dir3 /

отправлено 268 байт получено 73 байта 682,00 байт / сек
общий размер 0 ускорение 0,00 
 

8) Исключить несколько файлов или папок

Если мы хотим исключить тип файлов * .txt и конкретную папку dir3 , мы можем ввести команду ниже.

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude '*.txt '--exclude' dir3 'источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude '* .txt' --exclude 'dir3' source / [email protected]: destination /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
dir1 /
dir1 / dir2 /

отправлено 109 байт получено 61 байт 340,00 байт / сек
общий размер 0 ускорение 0,00 
 

9) Исключить несколько каталогов с определенным шаблоном

Мы также можем предоставить несколько каталогов с определенным шаблоном для исключения.Мы будем использовать подстановочный знак * для завершения имени каталога dir .

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --exclude 'dir *' источник / назначение /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --exclude 'dir *' источник / [email protected]: пункт назначения /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
file1.txt
файл2.текст

отправлено 168 байт получено 91 байт 518,00 байт / сек
общий размер 0 ускорение 0,00 
 

10) Исключить файлы определенного размера

Мы обнаружили, что в процессе резервного копирования некоторые файлы большого размера копируются очень долго. нам нужно скопировать некоторые фильмы размером более 1 ГБ. Итак, мы думаем, что было бы лучше, если бы мы могли просто исключить большие файлы или любые неважные файлы, чтобы как можно скорее завершить резервное копирование.

Например, мы хотим исключить файлы размером более 3 МБ.Все, что нам нужно сделать, это использовать опцию --max-size = SIZE с командой rsync. Эта опция не будет передавать файлы больше указанного размера.

  $ sudo rm -rf назначение  
  $ sudo rsync -avz --max-size = 3 м источник / место назначения /  

Для удаленной синхронизации мы можем ввести команду ниже.

  $ sudo rsync -avz --max-size = 3m источник / [email protected]: пункт назначения /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
file1.txt
file2.txt
dir1 /
dir1 / dir2 /
dir1 / dir2 / Bootstrap-tutorial.pdf
каталог1 / каталог2 / file3.txt
dir3 /
dir3 / file4.txt

отправлено 3080297 байт получено 168 байт 6160930,00 байт / сек
общий размер 8,101,480 ускорение 2,63 
 

Мы также можем использовать --min-size = SIZE , чтобы исключить любой файл, размер которого меньше указанного.

, например, чтобы исключить файлы размером менее 7 МБ, выполните следующую команду.

  $ sudo rsync -avz --min-size = 7 м источник / место назначения /  
  выход
отправка добавочного списка файлов
созданный каталог назначения
./
dir1 /
dir1 / dir2 /
dir3 /

отправлено 313 байт получено 65 байт 756,00 байт / сек
общий размер 8101480 ускорение 21432,49 
 

Суффиксы размеров следующие:

  • «K» (или «KiB») — килобайт (1024)
  • «M» (или «MiB») — мегабайт (1024 * 1024)
  • «G» (или «GiB») — гигабайт (1024 * 1024 * 1024)

Если вы хотите, чтобы множитель был равен 1000 вместо 1024, используйте «КБ», «МБ» или «ГБ» (Примечание: строчные буквы также принимаются для всех значений).

Надеюсь, вам понравился этот урок! Оставьте пожалуйста свои комментарии

Читайте также:

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

Используя команду rsync, мы можем исключить определенный файл или каталог, несколько файлов или каталогов. Кроме того, мы можем исключить несколько файлов или каталогов на основе шаблона.

Здесь, в Bobcares, мы видели несколько таких запросов, связанных с командой rsync, как часть наших служб управления сервером для веб-хостов и поставщиков онлайн-услуг.

Сегодня мы рассмотрим, как исключить файлы с помощью команды rsync.

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

Вот различные способы, которыми следуют наши инженеры службы поддержки, чтобы исключить файлы и каталоги с помощью команды rsync.

Исключить определенный файл

Мы исключаем конкретный файл, передав относительный путь к файлу параметру –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-from.Вот команда, в которой exclude-file.txt — это файл, в который мы поместили все файлы и каталоги, которые хотим исключить.

  rsync -a --exclude-from = 'exclude-file.txt' src_directory / dst_directory /  
  exclude-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 /  

[Нужна дополнительная помощь с запросами команды rsync? — Мы будем рады вам помочь.]

Заключение

В сегодняшней записи мы увидели, как наши инженеры службы поддержки исключают файлы и каталоги с помощью команды rsync.

ПРЕДОТВРАЩАЙТЕ СВОЙ СЕРВЕР ОТ ВЫБОРА!

Никогда больше не теряйте клиентов из-за низкой скорости сервера! Позвольте нам помочь вам.

Наши специалисты по серверам будут контролировать и обслуживать ваш сервер 24/7, чтобы он оставался молниеносным и безопасным.

НАЧАТЬ

var google_conversion_label = «owonCMyG5nEQ0aD71QM»;

Исключить несколько файлов и каталогов с помощью rsync

Rsync — очень мощный инструмент для создания резервных копий или синхронизации файлов и каталогов между двумя разными местоположениями (или серверами).

В типичной ситуации резервного копирования вы можете исключить один или несколько файлов (или каталогов) из резервной копии. Вы также можете исключить определенный тип файла из rsync. Ниже приведены несколько примеров того, как это сделать:

Если вы не хотите синхронизировать каталог dir1 (включая все его подкаталоги) из источника в папку назначения, используйте параметр rsync –exclude, как показано ниже.

 $ rsync -avz --exclude 'dir1' источник / назначение / 

В следующем примере будет исключен любой каталог (или подкаталоги) в источнике /, который соответствует шаблону «dir *»

 $ rsync -avz --exclude 'dir *' источник / назначение / 

Чтобы исключить конкретный файл, используйте относительный путь к файлу в опции исключения, как показано ниже.

 $ rsync -avz --exclude 'dir1 / somefile.txt' источник / назначение / 

Чтобы исключить определенный тип файла с определенным расширением, используйте соответствующий шаблон. Например, чтобы исключить все файлы с расширением .txt, выполните следующие действия.

 $ rsync -avz --exclude '* .txt' источник / назначение / 

Если вы хотите исключить несколько файлов и каталогов, вы всегда можете указать несколько параметров исключения rsync в командной строке, как показано ниже.

 $ rsync -avz --exclude file1.txt --exclude dir3 / file4.txt источник / назначение / 

Итак, лучший способ — использовать параметр rsync –exclude-from, как показано ниже, где вы можете перечислить все файлы (и каталоги), которые вы хотите исключить из файла.

Сначала создайте текстовый файл со списком всех файлов и каталогов, резервные копии которых вы не хотите делать. Это список файлов и каталогов, которые вы хотите исключить из rsync.

 $ vim exclude-list.txt
file1.txt
каталог3 / файл4.txt 

Затем выполните rsync, используя параметр –exclude-from с файлом exclude-list.txt, как показано ниже.

 $ rsync -avz --exclude-from 'exclude-list.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *