- Как исключить файлы и каталоги с помощью Rsync
- Подготовка
- Исключить определенный файл
- Исключить конкретный каталог
- Исключить несколько файлов или каталогов
- Исключить несколько файлов или каталогов на основе шаблона
- Выводы
- unixforum.org
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
- Re: исключения при копировании
Как исключить файлы и каталоги с помощью 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 вариант.
Команда ниже делает то же самое, что и команда выше:
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
Можно ли как-то задать, какие файлы и каталоги будут исключены при копировании? Нужно рекурсивно скопировать файловую систему из одного места в другое, исключив при этом несколько каталогов. Вручную это делать не получится, т.к. это должен выполнять скрипт с той или иной периодичностью.
З.Ы. Сорри за глупый вопрос, но никак не могу найти ответ.
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 Контактная информация:
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