Как заставить rsync исключить любой каталог с именем cache?

#directory #rsync

#каталог #rsync

Вопрос:

Я новичок в rsync и немного прочитал об исключении файлов и каталогов, но я не до конца понимаю и, похоже, не могу заставить его работать.

Я просто пытаюсь запустить резервную копию всех веб-сайтов в веб-корне сервера, но мне не нужны какие-либо файлы кэша CMS.

Есть ли способ исключить любой каталог с именем cache?

За эти недели я много чего перепробовал (чего я не помню), но совсем недавно я пробовал подобные вещи:

 sudo rsync -avzO -e --exclude *cache ssh username@11.22.33.44:/home/ /Users/username/webserver-backups/DEV/home/
  

и это:

 sudo rsync -avzO -e --exclude cache/ ssh username@11.22.33.44:/home/ /Users/username/webserver-backups/DEV/home/
  

и это:

 sudo rsync -avzO -e --exclude */cache/ ssh username@11.22.33.44:/home/ /Users/username/webserver-backups/DEV/home/
  

и это:

 sudo rsync -avzO -e --exclude *cache/ ssh username@11.22.33.44:/home/ /Users/username/webserver-backups/DEV/home/
  

Извините, если это просто, я просто не смог найти информацию, которую я понимаю, потому что все они говорят о пути для исключения.

Просто у меня нет определенного пути, который я хочу исключить — просто имя каталога, если это имеет смысл.

Ответ №1:

 rsync --exclude cache/ ....
  

должно работать как персики. Я думаю, вы можете что-то путать, поскольку -e требуется опция (например -e "ssh -l ssh-user" ). Редактировать при более внимательном рассмотрении ваших командных строк оказывается, что это именно ваша проблема. Вы должны были сказать

 --exclude cache/ -e ssh
  

хотя вы могли бы просто отказаться -e ssh , поскольку ssh используется по умолчанию.


Я бы также рекомендовал вам ознакомиться с правилами фильтрации:

 rsync -FF ....
  

Таким образом, вы можете включить файлы .rsync-filter по всему дереву каталогов, содержащие такие вещи, как

 -cache/
  

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

Комментарии:

1. Спасибо за это. Итак, чтобы проверить, я удалил опцию -e и попробовал cache / like this sudo rsync -avzO --exclude cache/ ssh username@11.22.33.4:/home/ /Users/username/webserver-backups/LIVE/home/ , Но из-за косой черты в cache / rsync считает ssh каталогом, и я получаю сообщение об ошибке: /Users/username/ssh failed: No such file or directory

2. @CMSCSS: это ваша проблема прямо здесь. НЕ РАЗДЕЛЯЙТЕ -e и ssh . Как я уже сказал, ssh идет вместе -e . Хотя, когда оболочка есть ssh , вы можете просто вообще отказаться от этой -e ssh опции, поскольку она используется по умолчанию

3. Хорошо, спасибо за это — теперь я понимаю! Итак, теперь это работает: sudo rsync -avzO -e "ssh -l remote-username" --exclude cache/ 11.22.33.44:/home/ /Users/local-username/webserver-backups/DEV/home/ Ура!