Назад | Перейти на главную страницу

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

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

например: Источник:

curfolder/dir1/dir2/blah_template.ext
curfolder/dir3/dir4/foo_template.blah

Предполагаемый пункт назначения:

destfolder/dir1/dir2/blah_template.ext
destfolder/dir3/dir4/foo_template.blah

Эта команда не сработала; он помещает все файлы в базовую папку назначения, а не в правильные подкаталоги:

rsync -av curfolder/*/*/*template* destfolder

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

rsync -av -f"+ *template*" curfolder destfolder

Один из способов сделать это:

rsync -av --include "*/" --include="*_template*" --exclude="*" --prune-empty-dirs curfolder/ destfolder/  

rsync человек

что он делает, выражается словами:

  1. включить каждую папку
  2. включить все подходящее _template
  3. исключить все остальное
  4. удалить пустые папки

Два включения имеют приоритет перед исключением, поэтому исключение соответствует только всему, что не соответствует включению.