Копирование файлов по расширению
Решено: Копирование файлов с определенным расширением.
Модератор: SLEDopit
Используем Robocopy . Примеры.
Robocopy — это отличнейшая вещь, очень гибкий инструмент для копирования и даже бэкапа. И самое интересное то, что она поддерживает длинные пути файлов т.е. более 256 симоволов. Wiki: Это утилита командной строки для репликации (не просто копирования) каталогов (папок). Она была доступна как часть Windows Resource Kit и представлена как стандартный компонент Windows Vista, Windows 7 и Windows Server 2008. Поставляется компанией Microsoft «как есть» без гарантий и техподдержки.
Robocopy разработана для отказоустойчивого копирования каталогов и деревьев каталогов. Она обладает возможностью копирования всех (или выборочных) NTFS атрибутов и свойств, имеет дополнительный код для перезапуска при применении с сетевым соединением в случае его разрывов.
Все это необхожимо если вам нужно перенести целый каталог файлов с сервера со всеми настройками прав доступа в том числе и атрибутов времени создание файлов или скопировать файлы исключив какие то файлы (по разным атрибутам или расширению) или папки. Также robocopy удобно использовать в качестве программы для бэкапа файлов с компьютеров пользователей на сервер ( дальше на сервере работает добавочная архивация) — самое оптимальное решение.
Параметры копирования из robocopy /help
[spoiler show=»Показать текст»] — ROBOCOPY :: Robust File Copy for Windows
Применение:: ROBOCOPY источник назначение [файл [файл]…] [Параметры]
Источник:: Исходная папка (диск:\путь или \\сервер\общий ресурс\путь).
Назначение :: Конечная папка (диск:\путь или \\сервер\общий ресурс\путь).
Файл :: Копировать файлы (имена и подстановочные знаки: по умолчанию «*.*»).
::
:: Параметры копирования:
::
/S :: Копировать вложенные папки, кроме пустых.
/E :: Копировать вложенные папки, включая пустые.
/LEV:n :: Копировать только верхние n уровней исходного дерева папок.
/Z :: Копирование файлов с возобновлением.
/B :: Копирование файлов в режиме архивирования.
/ZB :: используется режим с возобновлением; если доступ запрещен, используется режим архивации.
/EFSRAW :: Копирование всех зашифрованных файлов в режиме EFS RAW.
/COPY: флаги копирования :: что копируется для файлов (по умолчанию /COPY:DAT).
(флаги копирования: D=Данные, A=Атрибуты, T=Метки времени).
(S=Безопасность=NTFS ACLs, O=Сведения о владельце, U=Сведения аудита).
/DCOPY:T :: Копирование меток времени папки.
/SEC :: Копировать файлы с параметрами безопасности (эквивалентно /COPY:DATS).
/COPYALL :: Копировать все сведения о файле (эквивалентно /COPY:DATSOU).
/NOCOPY :: Не копировать никаких сведений о файле (удобно использовать с параметром /PURGE).
/SECFIX :: Исправлять параметры безопасности для всех файлов, даже пропущенных.
/TIMFIX :: Исправлять атрибуты времени для всех файлов, даже пропущенных.
/PURGE :: Удалять файлы и папки назначения, которых больше не существует в источнике.
/MIR :: Создать зеркало дерева папок (эквивалентно /E с /PURGE).
/MOV :: Перемещать файлы (удаление из источника после копирования).
/MOVE :: Перемещать файлы и папки (удаление из источника после копирования).
/A+:[RASHCNET] :: Добавлять заданные атрибуты скопированным файлам.
/A+:[RASHCNET] :: Удалять заданные атрибуты из скопированных файлов.
/CREATE :: Создать только дерево папок и файлы нулевой длины.
/FAT :: Создать файлы назначения только в формате 8.3 FAT.
/256 :: Отключить поддержку длинных путей ( > 256 знаков).
/MON:n :: Наблюдать за источником; перезапустить после n изменений.
/MOT:m :: Наблюдать за источником; перезапустить через m минут, если произошли изменения.
/RH:hhmm-hhmm :: Часы запуска — время, когда можно запускать новое копирование.
/PF :: Проверять часы запуска по файлам (не по проходам).
/IPG:n :: Интервал между пакетами (мс) для снижения нагрузки на сеть при низкоскоростных подключениях.
/SL:: копирование самих символических ссылок вместо копирования целевого объекта этих ссылок.
::
:: Параметры выбора файлов:
::
/A :: Копировать только файлы с установленным атрибутом «Архивный».
/M :: Копировать только файлы с атрибутом «Архивный» и сбросить его.
/IA:[RASHCNETO] :: Включить файлы, у которых установлен какой-либо из заданных атрибутов.
/XA:[RASHCNETO] :: Исключить файлы, у которых установлен какой-либо из заданных атрибутов.
/XF file [файл]… :: Исключить файлы, соответствующие заданным именам, путям и подстановочным знакам.
/XD dirs [папки]… :: Исключить папки, соответствующие заданным именам и путям.
/XC :: Исключить измененные файлы.
/XN :: Исключить более поздние файлы.
/XO :: Исключить более ранние файлы.
/XX :: Исключить дополнительные файлы и папки.
/XL :: исключить отдельно расположенные файлы и папки.
/IS :: Включить те же файлы.
/IT :: Включить оптимизированные файлы.
/MAX:n :: Максимальный размер файла — исключить файлы, размер которых более n байт.
/MIN:n :: Минимальный размер файла — исключить файлы, размер которых менее n байт.
/MAXAGE:n :: Максимальный возраст файла — исключить файлы, возраст которых превышает n дней.
/MINAGE:n :: Минимальный возраст файла — исключить файлы, возраст которых менее n дней.
/MAXLAD:n :: Наиболее поздняя дата последнего обращения — исключить файлы, которые не использовались с даты n.
/MINLAD:n :: Наиболее ранняя дата последнего обращения — исключить файлы, которые использовались после даты n.
(Если n < 1900, то n = n дней, в противном случае n — дата в формате ДДММГГГГ).
/XJ :: исключить точки соединения. (по умолчанию обычно включаются).
/FFT :: Использовать время файлов FAT (двухсекундная точность).
/DST :: Учитывать одночасовую разницу при переходе на летнее время.
/XJD :: Исключить точки соединения для папок.
/XJF :: Исключить точки соединения для файлов.
::
:: Параметры повторных попыток:
::
/R:n :: число повторных попыток для неудавшихся копий: по умолчанию — 1 миллион.
/W:n :: Время ожидания между повторными попытками: по умолчанию — 30 секунд.
/REG :: Сохранить /R:n и /W:n в реестре как параметры по умолчанию.
/TBD :: Ждать, пока будут определены имена общих ресурсов (ошибка повторной попытки 67).
::
:: Параметры ведения журнала:
::
/L :: Только список — файлы не копируются, не удаляются, не помечаются метками времени.
/X :: Сообщать обо всех дополнительных файлах, а не только о выбраных.
/V :: Подробный вывод с указанием пропущенных файлов.
/TS :: Включать в вывод метки времени исходных файлов.
/FP :: Включать в вывод полные пути файлов.
/BYTES :: Печатать размеры в байтах.
/NS :: Без размера — не заносить в журнал размер файлов.
/NC :: Без класса — не заносить в журнал классы файлов.
/NFL :: Без списка файлов — не заносить в журнал имена файлов.
/NDL :: Без списка папок — не заносить в журнал имена папок.
/NP :: Без хода процесса — не отображать число скопированных %.
/ETA :: Показывать оценку времени окончания копирования файлов.
/LOG: файл :: Записывать состояние в файл журнала (перезаписывать существующий журнал).
/LOG+: файл :: Записывать состояние в файл журнала (добавлять к существующему журналу).
/UNILOG: файл :: Записывать состояние в файл журнала в формате Юникод (перезаписывать существующий журнал).
/UNILOG+: файл :: Записывать состояние в файл журнала в формате Юникод (добавлять к существующему журналу).
/TEE :: Направлять выходные данные в окно консоли и в файл журнала.
/NJH :: Без заголовка задания.
/NJS :: Без сведений о задании.
/UNICODE :: Cостояние вывода в формате Юникод.
::
:: Параметры задания:
::
/JOB: имя_задания :: Взять параметры из указанного файла задания.
/SAVE: имя_задания :: Сохранить параметры в указанный файл задания
/QUIT :: Выйти после обработки командной строки (для просмотра параметров).
/NOSD :: Не указывается исходная папка.
/NODD :: Не указывается папка назначения.
/IF :: Включить следующие файлы [/spoiler]
1. Скопировать файлы, измененные за последние 5 дней (исключая сегодня).
robocopy «E:\Documents» «\\NAS\BACKUP\Documents» /maxage:5 /minage:1
2. Переместить все файлы:
robocopy «E:\Documents» «\\NAS\BACKUP\Documents» /move /e
3. Скопировать файлы за исключением скрытых (/xa:h):
robocopy «E:\Documents» «\\NAS\BACKUP\Documents» /e /xa:h
или за исключением read-only (/ia:rs):
robocopy «E:\Documents» «\\NAS\BACKUP\Documents» /ia:rs
При копировании также можно менять атрибуты файлов, при помощи опции A+ (добавить атрибут) or A- (удалить атрибут). Скопировать все файлы и задать им атрибут read-only:
robocopy «E:\Documents» «\\NAS\BACKUP\Documents» /e /A+:r
4. Скопировать все файлы по шаблону (расширению), пустые папки не копировать:
robocopy «E:\Documents» «\\NAS\BACKUP\Documents» *.doc *.ppt /s
5. Скопировать все файлы размером от 1000 до 60000 байт:
robocopy «E:\Documents» «\\NAS\BACKUP\Documents» /e /max:60000 /min:1000
6. Исключить из копирования папку AppData (/XD AppData):
Robocopy «C:\Users\Administrator» «\\NAS\BACKUP\Administrator» /MIR /XA:SH /XD AppData /XJD
7. Создать 32 потока (/MT:32) копирования файлов:
Robocopy «C:\Users\Administrator» \\NAS\BACKUP\Administrator /MIR /XA:SH /XD AppData /XJD /R:5 /W:15 /MT:32
8. Скопировать файлы из одной папки в другую со стандартными атрибутами исключив файл по расширению (допустим *.doc)
Robocopy » Robocopy «C:\Users\Administrator» «\\server\userbackup» /СOPY:DAT /XF *.doc
Пример использования для бэкапа
robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /R:2 /W:5 /MT:64
В данном примере:
Мы копируем папку «исходная папка», находящуюся на локальном диске D:
Мы копируем эту папку на компьютер \\192.168.0.1 в папку «целевая папка»
/E : Мы копируем все подпапки и файлы
/Z : Включаем поддержку докачки (на случай обрыва связи)
/COPY:TDASO : Копируем все атрибуты и ACL прав доступа NTFS (но не копируем атрибуты аудита)
/DCOPY:T : Копируем время создания папок
/M : Копируем только файлы с установленным атрибутом «A — Архивный» и сбрасываем этот атрибут, что позволяет нам копировать только измененные файлы.
/R : Количество повторных попыток копирования файла в случае, если копирование не удалось. Причем «не удалось» срабатывает и в том случае, если доступ к файлу закрыт. По-умолчанию = 1 миллионы, т.е. бесконечно, потому копирование благополучно встанет на первом же файле, к которому не будет доступа.
/W : Задержка в секундах между попытками копирования. По-умолчанию = 30 секундам.
/MT — кол-во потоков, увеличив которые можно ускорить копирование. Будет быстрее чем обычное копирование файла точно.
Заметка. Очень рекомендую задавать вручную параметры /R и /W, иначе при автоматической синхронизации она попросту зависнет, встретив на своем пути ошибку доступа.
2) Похожий пример , но обратите внимание — каждый раз бэкап копируется в папку с названием даты и времени. Очень удобно для создание добавочного бэкапа.
robocopy D:\исходная_папка \\192.168.0.1\целевая_папка\ %date:~0,2%.%date:~3,2%.%date:~6,4%.%time:~0,2%-%time:~3,2% /E /Z /COPY:TDASO /DCOPY:T /M /R:2 /W:5
%date:~0,2%.%date:~3,2%.%date:~6,4%.%time:~0,2%-%time:~3,2% - дата и время созда ние бэкапа в качестве названия папки. В итоге получается папка вида 16.01.2016-10.19
Или так — %date:~6,4%-%date:~3,2%-%date:~0,2%_%time:~0,2%-%time:~3,2% Результат — 2016-03-13_23-30
Много интересного вы также сможете узнать набрав команду set /?
Всем доброго времени суток. Ребят, прошу прощения если данная тема уже существует, но решения я не нашел. Очень нужна ваша помощь.
Есть каталог, в котором много других подкаталогов. В каждом подкаталоге есть файлы с разным расширением. Как найти только те подкаталоги, в которых есть только файлы с расширением PDF и скопировать эти подкаталоги со всеми файлами в другое место сохранив при этом структуру подкаталогов. Заранее спасибо)
Копирование файлов с определённым расширением из всех подкаталогов и запись их имён в текстовый файл
Доброго времени суток. Задача немного похожа на описанную в этой теме. Нужен bat, который: все.
Копирование файлов Excel из всех подкаталогов определенной папки в отдельную папку
Описываю ситуацию: есть папка в которой (условно) 100 папок, в каждой папке по три файла разного.
Копирование всех файлов с определённым расширением
Здравствуйте! Задание такое: Копирование всех файлов с расширением doc из папки, в которой.
Копирование всех файлов с заданным расширением из одной заданной папки в другую заданную папку
Создайте командный файл, который копирует все файлы с расширением, заданным в качестве первого.
Если в папке есть файл pdf, то нужно скопировать всю папку с этим файлом и другие файлы, которые лежат в этой папке. Использование xcopy или robocopy с маской по расширению pdf не поможет, т.к. скопируются только файлы pdf и сохраниться дерево папок, остальные файлы в этой папке копироваться не будут. Если в маске указать несколько расширений, то скопируются папки, в которых отсутствует pdf файл.
Моя идея следующая, используя первый цикл, проходим по подпапкам, вторым циклов ищем файлы pdf в подпаках. Если файл pdf есть в подпапке, то записываем путь к этой подпапке (без имени и расширения файла) в переменную, а переменную записываем в текстовый файл.
Но здесь я столкнулся с проблемой, если использовать robocopy или xcopy внутри цикла, который будет читать текстовый документ построчно для использования пути к подпапкам в процессе копирования, происходит либо зацикливание, либо теряется структура папок
Итак господа, задача такова:нужно создать батник для копирования файлов с определенными расширениями (вводятся с клавиатуры) из разных каталогов с возможностью создания резервного каталога, если его нет в системе.
Намекните как это провернуть? Нашел только как сделать это из текшего каталога, а не со всех логических дисков. Заранее благодарю.
Резервное копирование файлов с определенными расширениями из разных каталогов
резервное копирования файлов с определенными расширениями из разных каталогов с возможностью.
Резервное копирование файлов с определенными расширениями из разных каталогов
Резервное копирование файлов с определенными расширениями из разных каталогов с возможностью.
Резервное копирование файлов с определенными расширениями из разных каталогов с возможностью создания резервно
Резервное копирование файлов с определенными расширениями из разных каталогов с возможностью.
Копирование файлов с определёнными расширениями
Копирование файлов с определенным расширением. Поле ввода расширения (cpp, pas). Dim.
То есть у нас есть Папка-Каталог. В ней Множество других папок и бат файл. При запуске бат файла создаётся (или не создаётся если уже имеется) папка, и в нее копируются файлы которые находятся в папках вокруг Бат файла. Так ?
Немного не так. Батник запускается с любого места. Потом ищет на компьютере, на всех дисках файлы с заданным расширением, все какие находить копирует в заданный каталог. Примерно так.
Почти готово, скоро вернусь доделаю.
Добавлено через 16 часов 37 минут
И так, с начала задаём формат а потом путь. Путь задаём так как во первых я не знаю как сделать проверку по всем дискам, нет я знаю, но код будет оч. большим. А во вторых время на сканирование всех дисков и всех файлов в каталогах и подкаталогах, займёт уйму времени.
В идеале, бат нужно дописать.
Добавлено через 3 минуты
Так же программа даёт сбой на 1-6 файлов, не известно по какой причине.
Добавлено через 1 час 14 минут
Наверное по тому что файлы повторяются.
Добавлено через 45 минут
Вариант 1 создаёт вот такой вот файлик по окончанию процесса.
Вот его содержание.
Перебирает все папки на локальных дисках и копирует файлы jpg в одну папку.
Самый простой вариант не учитывается что имена файлов могут совпадать.
Спасибо господа, но что то я не могу уловить суть этой строки, объясните пожалуйста.
Если существует логический диск "C:\" то выводим список всех каталогов и подкаталогов и затем копируем все файлы с расширением которое присвоено переменной %FileFormat% напримет "txt", в папку с именем "%FileFormat%_Files" то есть в нашем случае папка будет называться "txt_Files".
К переменной "%%a" мы присваиваем с помощью FOR путь папок и под папок. Далее мы ставим * так как имя файла не важно (* - любое значение), но при этом важен формат файла. То есть выходит что мы делаем условие, любое имя файла но с форматом "%FileFormat%" например всё тот же "ТХТ"
Так мы имеем папку "С:\1" и этот путь присваиваем "%%a" в этой папке находятся 2 файла, File_One.ТХТ и File_Two.INI.
Команда copy "%%a\*.%FileFormat%" будет выглядеть так copy "С:\1\File_one.txt"
и copy "С:\1\File_two.txt" так как copy "С:\1\File_one.txt" не существует то копируется только 1 файл.
А насчет "tokens=*" то мы его ставим только для работоспособности FOR. То есть если у нас в имени файла или пути будет * то FOR присвоит %%j значение стоящее после *, но так как в именах файлов и именах папок такой символ использовать нельзя, то мы используем именно его, зная что он нам не встретится.
Добавлено через 11 секунд
Как то так.
Насчет "tokens=*" ты конечно напутал.
Команда for /f выполняет строку в одинарных кавычках (в данном случае эту dir /b /s /ad "C:\") как команду а полученные строки разбиваются на "слова" по умолчанию символ разделения пробел.
И по умолчанию берется первое слово которое идет нашей переменной. С помощью tokens задается число этих слов которые пойдут в переменную, * означает все. Те в переменную %%a попадает строка целиком.
Аналогичный результат получится если написать в параметрах "delims=". Это будет означать что строка не будет делится разделителями. И в переменную %%a попадет опять же вся строка целиком.
Добавлено через 1 минуту
Вообще кто нибудь читал описание команды for /?
Там все это расписано подробным образом.
Здравствуйте, такая вот проблема: при переустановке windows на Linux mint не уследил за одним моментом и затер все файлы. Там и фотки маленькой дочки, и фотки со свадьбы короче супруга рвет и мечет как восстановить файлы я вроде разобрался, Восстанавливал с помощью photorec, но он мне нашел 1 000 000 файлов (не только фотки но еще кучу всего), пользоваться стандартным поиском просто не возможно (все безумно виснет). Подскажите, как с помощью терминала найти файлы только .jpg и скопировать их в другую директорию. Заранее благодарю.
Выборка файлов по расширению, упаковка, отправка адресатам, ведение лога, резервное копирование
Всем привет Сделал следующий батник Он ищет в папке файлы aaa0000bbb*.CNG, архивирует их в.
Поиск файлов по расширению
Как из папки и подпапок получить список файлов с расширением "txt", например? Спасибо
Поиск файлов по расширению
Есть переменная "NDisk" в которой хранится имя диска надо создать функцию которая ищет в корне.
Решение
. "то, что нашла команда find"
а искать она будет в той папке (и ее подпаках) в которой была запущена команда.
если есть желание указать конкретную папку, в которой искать, то ее нужно вписать сразу после find
Спасибо, вроде ищет, извините за назойливость, последний вопрос (надеюсь). у меня был один очень важный txt файл, photorec нашел полтора миллиона, подскажите пожалуйста как найти нужный зная его содержимое.
тогда не понимаю, на счет регистра символов у меня все было норм, почему у меня он думал очень долго и ничего не выдал. возможно что этого файла просто не существует.
это обычный "текстовый" поиск.
в этом разделе форума (или в убунте, или в линуксе) какой-то человек выкладывал свой специальный скрипт для поиска. может он поможет (если найдете)
и кстати, если файл в виндузной кодировке, то там русский текст с другой кодовой страницей.
файл виндовый, текст на русском, кстати ваш код выдает ошибку, типа не может найти файл или каталог, дело в том что в папке восстановления есть подкаталоги, может поэтому не хочет. Какой то скрипт я находил, но в комментариях сказали что он велосипед изобрел, уж не знаю на сколько это правда
="сферический конь в вакууме".пишите сюда точно - что именно сообщает система, тогда будет видно, какую я там ошибку сделал
я же написал выдает "Нет такого файла или каталога", это когда /*.txt. без txt ищет но результатов не выдает
Спасибо, сейчас буду пробовать
Добавлено через 31 минуту
я вам уже надоел, но не могу не спросить, с помощью find он нашел и скопировал все фотки какие восстановил, но там тоже очень много хлама (всякие логотипы, файлы из интернета, которые даже не качали) в результате файлов в одной папке получилось еще больше 204 000, при открытии папки он так виснет, что даже не отображает (только внизу пишет сколько в ней находится файлов), как можно из папки где на данный момент скопированные все фотки, произвести еще один поиск, только на этот раз по весу файла, например чтобы он искал и копировал фотки, которые не меньше 1Мб.
Вы наверное с помощью photorec искали все файлы. В этой программе можно было задать маску и искать только, к примеру, jpg файлы.
Нет, у меня просто были не только txt и jpg, в смысле выбрал все что нужно Ребят, у меня получается папка, где отсортированны все фотки со значительными размерами (без подкаталогов) общий размер 96 Гб. Сами понимаете открыть такую папку и посмотреть что в ней достатьчно сложно. Как мне с помощью find или другой функции создать в этой папке подкаталоги, и разместить в каждом подкаталоге по 200 фотографий?!
P.S. Маны читал и гуглил, подходящей инфы не нашел, заранее спасибо
Поиск файлов по расширению
Надо написать консольное приложение, где входными данными были бы путь к каталогу и расширения.
Поиск файлов по расширению
Как выдрать расширение файлов в рассматриваемой папке и ее подпапках подскажите пожалуйста!! Т.е.
Поиск файлов по расширению в VBA
В YANDEX есть ПОИСК ФАЙЛов по РАСШИРЕНИЮ, а КАК Средствами VBA (СКАЧАТЬ ИНФУ по гиперссылкам из.
Поиск файлов по заданному расширению
Напишите пожалуста урывок программного кода, через который будет осуществляться поиск файлов на.
Решение
я правильно понял? <> - означает от куда будет копироваться, а /your/new/folder - куда. и обязателен ли обратный слэш в конце. (большое спасибо за ответ)
Решено: Копирование файлов с определенным расширением.
Здравствуйте.
Хоть вы подскажите какой командой можно скопировать все файлы с определенным расширением.
То есть есть директория в которой куча хлама, и куча директорий в которых опять же директории и хлам.
Мне нужно сделать скрипт который будет копировать с этой директории все файлы имеющие расширение mp3 mp4 avi
Пример
В этом случаи копируется содержимое dir1 со всеми папками и файлами. Но нужно тока с папками и файлами определенного расширения.
В итоге нужно получить
без лишних rgr.txt ooo.sh
Это как раз то что мне нужно с малыми недостатками, но то что нужно )))
Оно создало сетку директорий даже если в них нету нужных форматов.
Но это уже шаг. Во истину благодарен .
тока и при присутствии ключа m тоже копируются все директории даже если в них нету нужных расширений.
man по rsync там как правила ключи и примеры работы для создание бекапов, и что то я не смог разобраться как записать ключи для выполнение этой задачи.
Мне нужно сделать скрипт который будет копировать с этой директории все файлы имеющие расширение mp3 mp4 avi
мда. Настоящий линуксоид не ищет трудностей, он сам их придумывает. Ненужность rsync для локальных файлов уже обсуждалась.
Скоро придёт
Осень
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Скоро придёт
Осень
для ускорения команды желательно, что-бы одна cp копировала сразу группу файлов. для этого есть специальный синтаксис:
--parents нужно для того, что-бы при копировании ./dir1/dir2/file1 автоматически создавались target_dir/dir1 и target_dir/dir1/dir2.
ну и наконец, + в find пихает все найденные файлы в хвост команды (файл1 файл2 файл3 файл4. ). (точнее обычно все, если они влезают)
FILTER RULES
The filter rules allow for flexible selection of which files to transfer (include) and which files to skip
(exclude). The rules either directly specify include/exclude patterns or they specify a way to acquire
more include/exclude patterns (e.g. to read them from a file).
As the list of files/directories to transfer is built, rsync checks each name to be transferred against
the list of include/exclude patterns in turn, and the first matching pattern is acted on: if it is an
exclude pattern, then that file is skipped; if it is an include pattern then that filename is not skipped;
if no matching pattern is found, then the filename is not skipped.
Rsync builds an ordered list of filter rules as specified on the command-line. Filter rules have the fol‐
lowing syntax:
RULE [PATTERN_OR_FILENAME]
RULE,MODIFIERS [PATTERN_OR_FILENAME]
You have your choice of using either short or long RULE names, as described below. If you use a
short-named rule, the ’,’ separating the RULE from the MODIFIERS is optional. The PATTERN or FILENAME
that follows (when present) must come after either a single space or an underscore (_). Here are the
available rule prefixes:
exclude, - specifies an exclude pattern.
include, + specifies an include pattern.
merge, . specifies a merge-file to read for more rules.
dir-merge, : specifies a per-directory merge-file.
hide, H specifies a pattern for hiding files from the transfer.
show, S files that match the pattern are not hidden.
protect, P specifies a pattern for protecting files from deletion.
risk, R files that match the pattern are not protected.
clear, ! clears the current include/exclude list (takes no arg)
Note that the --include/--exclude command-line options do not allow the full range of rule parsing as
described above -- they only allow the specification of include/exclude patterns plus a "!" token to clear
the list (and the normal comment parsing when rules are read from a file). If a pattern does not begin
with "- " (dash, space) or "+ " (plus, space), then the rule will be interpreted as if "+ " (for an
include option) or "- " (for an exclude option) were prefixed to the string. A --filter option, on the
other hand, must always contain either a short or long rule name at the start of the rule.
Note also that the --filter, --include, and --exclude options take one rule/pattern each. To add multiple
ones, you can repeat the options on the command-line, use the merge-file syntax of the --filter option, or
the --include-from/--exclude-from options.
INCLUDE/EXCLUDE PATTERN RULES
You can include and exclude files by specifying patterns using the "+", "-", etc. filter rules (as intro‐
duced in the FILTER RULES section above). The include/exclude rules each specify a pattern that is
matched against the names of the files that are going to be transferred. These patterns can take several
forms:
o if the pattern starts with a / then it is anchored to a particular spot in the hierarchy of files,
otherwise it is matched against the end of the pathname. This is similar to a leading ^ in regular
expressions. Thus "/foo" would match a name of "foo" at either the "root of the transfer" (for a
global rule) or in the merge-file’s directory (for a per-directory rule). An unqualified "foo"
would match a name of "foo" anywhere in the tree because the algorithm is applied recursively from
the top down; it behaves as if each path component gets a turn at being the end of the filename.
Even the unanchored "sub/foo" would match at any point in the hierarchy where a "foo" was found
within a directory named "sub". See the section on ANCHORING INCLUDE/EXCLUDE PATTERNS for a full
discussion of how to specify a pattern that matches at the root of the transfer.
o if the pattern ends with a / then it will only match a directory, not a regular file, symlink, or
device.
o rsync chooses between doing a simple string match and wildcard matching by checking if the pattern
contains one of these three wildcard characters: ’*’, ’?’, and ’[’ .
o a ’*’ matches any path component, but it stops at slashes.
o use ’**’ to match anything, including slashes.
o a ’?’ matches any character except a slash (/).
o a ’[’ introduces a character class, such as [a-z] or [[:alpha:]].
o in a wildcard pattern, a backslash can be used to escape a wildcard character, but it is matched
literally when no wildcards are present.
o if the pattern contains a / (not counting a trailing /) or a "**", then it is matched against the
full pathname, including any leading directories. If the pattern doesn’t contain a / or a "**",
then it is matched only against the final component of the filename. (Remember that the algorithm
is applied recursively so "full filename" can actually be any portion of a path from the starting
directory on down.)
o a trailing "dir_name/***" will match both the directory (as if "dir_name/" had been specified) and
everything in the directory (as if "dir_name/**" had been specified). This behavior was added in
version 2.6.7.
Note that, when using the --recursive (-r) option (which is implied by -a), every subcomponent of every
path is visited from the top down, so include/exclude patterns get applied recursively to each subcompo‐
nent’s full name (e.g. to include "/foo/bar/baz" the subcomponents "/foo" and "/foo/bar" must not be
excluded). The exclude patterns actually short-circuit the directory traversal stage when rsync finds the
files to send. If a pattern excludes a particular parent directory, it can render a deeper include pat‐
tern ineffectual because rsync did not descend through that excluded section of the hierarchy. This is
particularly important when using a trailing ’*’ rule. For instance, this won’t work:
This fails because the parent directory "some" is excluded by the ’*’ rule, so rsync never visits any of
the files in the "some" or "some/path" directories. One solution is to ask for all directories in the
hierarchy to be included by using a single rule: "+ */" (put it somewhere before the "- *" rule), and per‐
haps use the --prune-empty-dirs option. Another solution is to add specific include rules for all the
parent dirs that need to be visited. For instance, this set of rules works fine:
+ /some/
+ /some/path/
+ /some/path/this-file-is-found
+ /file-also-included
- *
Here are some examples of exclude/include matching:
o "- *.o" would exclude all names matching *.o
o "- /foo" would exclude a file (or directory) named foo in the transfer-root directory
o "- foo/" would exclude any directory named foo
o "- /foo/*/bar" would exclude any file named bar which is at two levels below a directory named foo
in the transfer-root directory
o "- /foo/**/bar" would exclude any file named bar two or more levels below a directory named foo in
the transfer-root directory
o The combination of "+ */", "+ *.c", and "- *" would include all directories and C source files but
nothing else (see also the --prune-empty-dirs option)
o The combination of "+ foo/", "+ foo/bar.c", and "- *" would include only the foo directory and
foo/bar.c (the foo directory must be explicitly included or it would be excluded by the "*")
The following modifiers are accepted after a "+" or "-":
o A / specifies that the include/exclude rule should be matched against the absolute pathname of the
current item. For example, "-/ /etc/passwd" would exclude the passwd file any time the transfer
was sending files from the "/etc" directory, and "-/ subdir/foo" would always exclude "foo" when it
is in a dir named "subdir", even if "foo" is at the root of the current transfer.
o A ! specifies that the include/exclude should take effect if the pattern fails to match. For
instance, "-! */" would exclude all non-directories.
o A C is used to indicate that all the global CVS-exclude rules should be inserted as excludes in
place of the "-C". No arg should follow.
o An s is used to indicate that the rule applies to the sending side. When a rule affects the send‐
ing side, it prevents files from being transferred. The default is for a rule to affect both sides
unless --delete-excluded was specified, in which case default rules become sender-side only. See
also the hide (H) and show (S) rules, which are an alternate way to specify sending-side
includes/excludes.
o An r is used to indicate that the rule applies to the receiving side. When a rule affects the
receiving side, it prevents files from being deleted. See the s modifier for more info. See also
the protect (P) and risk ® rules, which are an alternate way to specify receiver-side
includes/excludes.
o A p indicates that a rule is perishable, meaning that it is ignored in directories that are being
deleted. For instance, the -C option’s default rules that exclude things like "CVS" and "*.o" are
marked as perishable, and will not prevent a directory that was removed on the source from being
deleted on the destination.
MERGE-FILE FILTER RULES
You can merge whole files into your filter rules by specifying either a merge (.) or a dir-merge (:) fil‐
ter rule (as introduced in the FILTER RULES section above).
There are two kinds of merged files -- single-instance (’.’) and per-directory (’:’). A single-instance
merge file is read one time, and its rules are incorporated into the filter list in the place of the "."
rule. For per-directory merge files, rsync will scan every directory that it traverses for the named
file, merging its contents when the file exists into the current list of inherited rules. These
per-directory rule files must be created on the sending side because it is the sending side that is being
scanned for the available files to transfer. These rule files may also need to be transferred to the
receiving side if you want them to affect what files don’t get deleted (see PER-DIRECTORY RULES AND DELETE
below).
The following modifiers are accepted after a merge or dir-merge rule:
o A - specifies that the file should consist of only exclude patterns, with no other rule-parsing
except for in-file comments.
o A + specifies that the file should consist of only include patterns, with no other rule-parsing
except for in-file comments.
o A C is a way to specify that the file should be read in a CVS-compatible manner. This turns on
’n’, ’w’, and ’-’, but also allows the list-clearing token (!) to be specified. If no filename is
provided, ".cvsignore" is assumed.
o A e will exclude the merge-file name from the transfer; e.g. "dir-merge,e .rules" is like
"dir-merge .rules" and "- .rules".
o An n specifies that the rules are not inherited by subdirectories.
o A w specifies that the rules are word-split on whitespace instead of the normal line-splitting.
This also turns off comments. Note: the space that separates the prefix from the rule is treated
specially, so "- foo + bar" is parsed as two rules (assuming that prefix-parsing wasn’t also dis‐
abled).
o You may also specify any of the modifiers for the "+" or "-" rules (above) in order to have the
rules that are read in from the file default to having that modifier set (except for the ! modi‐
fier, which would not be useful). For instance, "merge,-/ .excl" would treat the contents of .excl
as absolute-path excludes, while "dir-merge,s .filt" and ":sC" would each make all their per-direc‐
tory rules apply only on the sending side. If the merge rule specifies sides to affect (via the s
or r modifier or both), then the rules in the file must not specify sides (via a modifier or a rule
prefix such as hide).
Per-directory rules are inherited in all subdirectories of the directory where the merge-file was found
unless the ’n’ modifier was used. Each subdirectory’s rules are prefixed to the inherited per-directory
rules from its parents, which gives the newest rules a higher priority than the inherited rules. The
entire set of dir-merge rules are grouped together in the spot where the merge-file was specified, so it
is possible to override dir-merge rules via a rule that got specified earlier in the list of global rules.
When the list-clearing rule ("!") is read from a per-directory file, it only clears the inherited rules
for the current merge file.
Another way to prevent a single rule from a dir-merge file from being inherited is to anchor it with a
leading slash. Anchored rules in a per-directory merge-file are relative to the merge-file’s directory,
so a pattern "/foo" would only match the file "foo" in the directory where the dir-merge filter file was
found.
Here’s an example filter file which you’d specify via --filter=". file":
This will merge the contents of the /home/user/.global-filter file at the start of the list and also turns
the ".rules" filename into a per-directory filter file. All rules read in prior to the start of the
directory scan follow the global anchoring rules (i.e. a leading slash matches at the root of the trans‐
fer).
If a per-directory merge-file is specified with a path that is a parent directory of the first transfer
directory, rsync will scan all the parent dirs from that starting point to the transfer directory for the
indicated per-directory file. For instance, here is a common filter (see -F):
That rule tells rsync to scan for the file .rsync-filter in all directories from the root down through the
parent directory of the transfer prior to the start of the normal directory scan of the file in the direc‐
tories that are sent as a part of the transfer. (Note: for an rsync daemon, the root is always the same
as the module’s "path".)
Some examples of this pre-scanning for per-directory files:
rsync -avF /src/path/ /dest/dir
rsync -av --filter=': ../../.rsync-filter' /src/path/ /dest/dir
rsync -av --filter=': .rsync-filter' /src/path/ /dest/dir
The first two commands above will look for ".rsync-filter" in "/" and "/src" before the normal scan begins
looking for the file in "/src/path" and its subdirectories. The last command avoids the parent-dir scan
and only looks for the ".rsync-filter" files in each directory that is a part of the transfer.
If you want to include the contents of a ".cvsignore" in your patterns, you should use the rule ":C",
which creates a dir-merge of the .cvsignore file, but parsed in a CVS-compatible manner. You can use this
to affect where the --cvs-exclude (-C) option’s inclusion of the per-directory .cvsignore file gets placed
into your rules by putting the ":C" wherever you like in your filter rules. Without this, rsync would add
the dir-merge rule for the .cvsignore file at the end of all your other rules (giving it a lower priority
than your command-line rules). For example:
Both of the above rsync commands are identical. Each one will merge all the per-directory .cvsignore
rules in the middle of the list rather than at the end. This allows their dir-specific rules to supersede
the rules that follow the :C instead of being subservient to all your rules. To affect the other CVS
exclude rules (i.e. the default list of exclusions, the contents of $HOME/.cvsignore, and the value of
$CVSIGNORE) you should omit the -C command-line option and instead insert a "-C" rule into your filter
rules; e.g. "--filter=-C".
Читайте также: