Подтвердить что ты не робот

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

Я хочу скопировать все файлы с сервера A на сервер B, которые имеют одинаковое имя родительского каталога на разных уровнях иерархии файловой системы, например:

/var/lib/data/sub1/sub2/commonname/filetobecopied.foo
/var/lib/data/sub1/sub3/commonname/filetobecopied.foo
/var/lib/data/sub2/sub4/commonname/anotherfiletobecopied.foo
/var/lib/data/sub3/sub4/differentname/fileNOTtobecopied.foo

Я хочу скопировать первые три файла, все из которых имеют commonname в пути к серверу B. Я уже потратил много времени на поиск правильных шаблонов include/exclude для rsync, но я не получаю его. Следующая команда не работает:

rsync -a --include='**/commonname/*.foo' --exclude='*' [email protected]:/var/lib/data /var/lib/data

Я либо слишком много, либо несколько файлов. Как я могу синхронизировать только файлы с commonname в своем пути?

4b9b3361

Ответ 1

Я думаю, вы ищете это:

rsync -a -m --include='**/commonname/*.foo' --include='*/' --exclude='*' [email protected]:/var/lib/data /var/lib/data

В вашей команде есть две отличия:

  • Самый важный из них - --include='*/'. Без этого, как вы указали --exclude='*', rsync никогда не войдет в подкаталоги, так как все исключено. С --include='*/', подкаталоги больше не исключаются, поэтому rsync может с радостью отписаться.
  • Наименее важным является -m: это сокращает пустые каталоги. Без этого вы также получите скопированный (пустой) подкаталог /var/lib/data/sub3/sub4/differentname/.