Linux исключить папку при копировании

Как исключить файлы и каталоги с помощью 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= src_directory/ dst_directory/

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

Читайте также:  Запретить интерактивный вход linux

Команда ниже делает то же самое, что и команда выше:

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 все файлы .jpg .
  • —include=’*/’ — Затем мы src_directory все каталоги внутри каталога в 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 .

Источник

unixforum.org

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

Читайте также:  Process information linux command

З.Ы. Сорри за глупый вопрос, но никак не могу найти ответ.

Re: исключения при копировании

Сообщение FASTCHIP » 08.08.2007 19:49

Сразу говорю сори за глупый ответ.
Ну в опервых я почти не знаком с скриптами но вроде когда хочеш чтоб чтото копировалось нужно указать имя этого и разве нельзя задать какоето условие для исключения по имени.
а во вторых можно тупо копировать всё а потом сделать удаление лишнего

Re: исключения при копировании

Сообщение nadge » 08.08.2007 19:54

Я знаю, как сделать это для, к примеру, tar или rsync, а как для cp — х.з., в мане ничего про это нет, гугль тоже результатов не дал.

Re: исключения при копировании

Я знаю, как сделать это для, к примеру, tar или rsync, а как для cp — х.з., в мане ничего про это нет, гугль тоже результатов не дал.

Re: исключения при копировании

Сообщение vfed » 08.08.2007 20:04

Я знаю, как сделать это для, к примеру, tar или rsync, а как для cp — х.з., в мане ничего про это нет, гугль тоже результатов не дал.

Отсюда возможное решение: tar создаёт архив нужных файлов с исключениями и передаёт через пайп другому tar’у, который и распаковывает всё куда нужно

Re: исключения при копировании

Сообщение vicpo » 08.08.2007 20:20

 find -name "*.doc" -exec cp <> /tmp \;

вот пример копирования по маске всех файлов с расширением doc в каталог /tmp find мощная штука подробнее в мане или в гугле, где удобнее короче

Re: исключения при копировании

Сообщение nadge » 08.08.2007 20:51

arkhnchul Сообщения: 2284 Статус: Толчковый инженер ОС: Debian, Fedora Контактная информация:

Читайте также:  Linux заполнить файл нулями

Re: исключения при копировании

Сообщение arkhnchul » 08.08.2007 21:17

find -name "*" -exec cpscript.sh <> \;

где cpscript.sh — оный самописный скрипт, проверяющий файл на соответствие заданному условию и копирующий, если оное соответствие имеет место быть.

Re: исключения при копировании

find . ! -name «*.doc» -exec cp <> /tmp \;

Re: исключения при копировании

Сообщение stdds » 08.08.2007 22:23

А вот не проще ли чем выяснять как исключать файлы при копировании, просто сделать скрит в котором будут перечислены шаблоны файлов и каталогов которые будут копироваться?

«Нету смысла искать смысл там где нет ни какого смысла это бесмыслица ее все равно не осмыслить!» Burhan Haldun (Бесмысленые высказывания)

Re: исключения при копировании

Сообщение nadge » 09.08.2007 02:06

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

З.Ы. Копирую ФС установленного линукса в отдельное место для дальнейших преобразований и сборки LiveCD.

broom Бывший модератор Сообщения: 1629 Статус: мизантроп.ка ОС: Gentoo

Re: исключения при копировании

Сообщение broom » 09.08.2007 02:14

если вам нужна корневая фс без подмонтированных разделов и без каталогов dev, proc, sys, то у find есть опция -xdev.

Re: исключения при копировании

Сообщение ozz » 24.09.2008 18:43

cp -a -p -v -r `ls --ignore= *.txt` /temp

Пример рекурсивного копирования содержания текущей директории без файлов с расширением txt в директорию temp.
Обращаю внимание, что команда ls с ключем заключается в обратные апострофы

Re: исключения при копировании

Сообщение KostikN » 24.09.2008 19:53

А почему бы rsync для этих целей не использовать. Там достаточно возможностей для включения/исключения нужных/ненужных файлов.
Вот некоторые приемы использования.
Нужные вам опции:
—exclude=PATTERN -исключить файлы, соответствующие шаблону;
—exclude-from=file -исключить файлы, перечисленные в file.
Обычно делается так

rsync -av --exclude-from=ex.txt /home/kostik/dir1 /home/kostik/dir2

Источник

Оцените статью
Adblock
detector