Уже обсуждаемые методы будут выполнять рекурсивный поиск, но он потерпит неудачу, если вы снова выполните то же действие (если вы хотите добавить поддерево в существующее дерево)
По этой причине вам нужно проверить, что ваши каталоги еще не добавлены, а затем добавить только файлы, которые еще не добавлены. Для этого мы используем вывод cvs up
, чтобы увидеть, какие элементы еще не были добавлены - в начале строки у него будет знак вопроса.
Мы используем параметры -0
, -print0
и -zZ
, чтобы убедиться, что мы правильно обрабатываем пробелы в именах файлов. Мы также используем --no-run-if-empty
, чтобы избежать запуска, если ничего не нужно добавлять.
CVS_PATTERN=/tmp/cvs_pattern
cvs -z3 -q up | egrep '^\?.*' | sed -e 's/^? //' > $CVS_PATTERN
find . -type d \! -name CVS -print0 | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
find . \( -type d -name CVS -prune \) -o \( -type f -print0 \) | grep -zZf $CVS_PATTERN | xargs -0 --no-run-if-empty cvs add
cvs commit -m 'commiting tree recursively'
При таком подходе мы избежим таких ошибок:
cvs add: cannot add special file `.'; skipping
cvs [add aborted]: there is a version in ./dirname1 already
и
cvs add: `./dirname2/filename' already exists, with version number 1.1.1.1