Rsync кроме .svn папок и их подсодержания?

Я поддерживаю копию .bash_history в Мерзавце. Для упрощения этого я установил

# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

в .bashrc и следующих командах (измененный для общего использования) в сценарии очистки

# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"

sort --unique --output="~/.bash_history" "~/.bash_history"

который я выполняю прежде, чем включить строки git gui. Так как файл истории изменяется с каждой командой, я также заставил специальную команду обновлять тот определенный репозиторий:

git stash && git pull && git stash pop

10
20.11.2012, 01:23
2 ответа

-C опция для rsync может быть тем, что Вы хотите.

Не позволяйте краткому описанию в странице справочника одурачить Вас все же. Казалось бы, что опция только относится к CVS, но в зависимости от Вашей rsync версии это пропустит файлы почти каждой общей существующей системы управления версиями.

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).
31
27.01.2020, 19:59
  • 1
    Будьте очень осторожны, потому что эти расширения могут использоваться для файлов, которые Вы действительно хотите скопированный, например. *.a для iOS Static Libraries. –  Max Chuquimia 01.07.2014, 03:57
  • 2
    N.B. файлы и каталоги, исключено: любая папка, названная "ядром", не копируется, например,/myproj/api//myproj/core/<-не сохраненный! –  teknopaul 10.08.2016, 13:35

Почти — это должно быть

rsync -av --exclude='.svn*' [staging] [clean]

или любая другая форма заключения в кавычки, которое препятствует тому, чтобы оболочка развернула подстановочный знак. (Подстановочный знак только соответствовал бы маловероятному файлу, имя которого начинается --exclude=.svn, но лучше не рискнуть и также работать правильно, даже если оболочка настроена, чтобы дросселировать при несоответствии подстановочным знакам или развернуть их до пустого списка.)

-r уже включен в -a. Дополнительное r является просто лишним, это не будет делать ничего плохого.

--exclude файлы причин, соответствующие его аргументу, который не будет ни скопирован, ни рассмотрен для рекурсивного обхода. Обычная трудность с rsync идет другим путем, исключая каталог за исключением определенных частей его. См. фильтр Rsync: копирование одного шаблона только для некоторых подсказок.

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

7
27.01.2020, 19:59

Теги

Похожие вопросы