2013-10-07 3 views
0

Alright так что мой веб-сервер имеет следующую структуру файласинтаксис Rsync, чтобы скопировать определенные вложенные папки

/ 
    /home 
      /home/username 
          /home/username/public_html 
          /home/username/mail 
          /home/username/etc 
          ... 
      /home/username2 
          /home/username2/public_html 
          ... 

Так им пытаются выяснить способ делать cronjob, который делает Rsync Wich будет только синхронизировать папку public_html из 600 учетных записей, которые у меня есть. Я думал о том, что maybee делает список исключений с любым другим именем подпапки, находящимся под каталогами учетных записей, но я не был уверен, что это было оптимальное решение.

Есть ли способ сообщить rsync только синхронизировать содержимое общедоступных папок public_html без необходимости вручную вводить 600 учетных записей? Благодаря

PS .: Мое текущее решение было что-то среди линий:

rsync –vaRu –exclude ‘mail*’ -exclude 'etc*' home [email protected]:home 

С помощью этого решения, если какие-либо имена совпадают с именем директории, они не будут скопировали.

ответ

0

Вы можете сделать это с помощью трех фильтров:

rsync -av --filter="+ /home" \ 
      --filter="+ /home/*" \ 
      --filter="+ /home/*/public_html" \ 
      --filter="+ /home/*/public_html/**" \ 
      --filter="- *"/[email protected]:mirror 

Важно, чтобы добавить «+» фильтр для всех каталогов в дереве перед public_html и «**», чтобы включить все позади public_html ,

Единственным недостатком является то, что все домашние каталоги будут созданы по назначению, но так же, как пустые директории.

+0

Хорошо, я попробую это, это хорошо выглядит на самом деле, я не думал об обратном пути, а не об исключениях. большое спасибо! – Dexirian

+0

Ну, я просто сделал dryrun, и это кажется безупречным, rsync действительно является удивительным инструментом – Dexirian

Смежные вопросы