rsync: включить и исключить - PullRequest
0 голосов
/ 08 февраля 2019

Предполагая следующую структуру, которая должна быть rsync'ed:

 /Data
   /subDir1
      A.html
      /subDir1a
         AA.html
   /subDir2
      B.html
   1.txt
   2.txt
   2.txt~

rsync -aAHSXrv --include-from=$InExCL $Source $Destination

Теперь я хочу IN- и EXclude вещи в InExCl.list, используя + и -: Это отлично работает, файлы 2.txt и 2.txt ~ отображаются в резервной копии, 1.txt не:

+ 2.*
- *.txt

Для подкаталогов я пробовал аналогично (сначала плюс, минус), чтобы исключитьsubDir1, но для включения subDir1a с AA.html и subDir2 с B.txt:

+ subDir1a/*
- subDir1/*

Результат: subDir2 в порядке, subDi1 отображается пустым, а subDir1a даже не упоминается.

Никтопосоветуйте мне, как это можно сделать правильно?Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Спасибо, Чандра,

только сейчас я нашел другое решение, которое, кажется, работает для каталогов:

+ subDir1/subDir1a
- subDir1/*

в отношении подкаталогов, вашего результата (и желаемого), напримердостигнуто

├── subDir1
│   └── subDir1a
│       └── AA.html
└── subDir2
    └── B.html

Как вы думаете?

0 голосов
/ 08 февраля 2019

Единственный способ, которым я могу придумать, это поместить файл .rsync-filter в Data/subDir1/, содержащий следующие три строки.

include /*/
exclude /*
exclude /.rsync-filter

Первая включает все каталоги в этом файле, а втораяодин исключит все.Здесь важен порядок, потому что применяется первое соответствующее правило.Таким образом, первая строка обеспечивает обработку всех каталогов, даже если мы хотим исключить все файлы, не относящиеся к каталогам, в Data/subDir1/.

Страница man rsync содержит все подробности.Просто поищите - фильтр и ПРАВИЛА ФИЛЬТРА в нем.

Data
├── 1.txt
├── 2.txt
├── 3.txt
├── subDir1
│   ├── A.html
│   ├── .rsync-filter
│   └── subDir1a
│       └── AA.html
└── subDir2
    └── B.html

После команды rsync -rvt -F Data/ dest

Опция -F rsync учитывает .rsync-filter файлов, присутствующих в каждом каталоге.

dest выглядит следующим образом.

dest
├── 1.txt
├── 2.txt
├── 3.txt
├── subDir1
│   └── subDir1a
│       └── AA.html
└── subDir2
    └── B.html
...