Перечислите все URL репозитория SVN из папки в рекурсивном режиме - PullRequest
6 голосов
/ 08 ноября 2011

Мы ищем скрипт, который будет проходить в рекурсивном режиме все подпапки и перечислять все URL-адреса хранилища SVN и путь, где он был найден.

Он будет использоваться в / home папке пользователя.

Ответы [ 3 ]

4 голосов
/ 08 ноября 2011

Рекурсивно находите каталоги, и для каждого из них пытайтесь получить информацию SVN. Если это успешно, не спускайтесь в каталог и печатайте имя каталога.

find -type d -exec bash -c "svn info {} > /dev/null 2> /dev/null" \; -prune -print

Будет выведен список каталогов.

Если вам нужна информация о хранилище, вы можете добавить ее в середине команды find exec.

find -type d -exec bash -c "svn info {} 2> /dev/null | grep URL" \; -prune -print

Edit:

Я нашел гораздо лучшие результаты, только проверяя наличие подкаталога .svn. Затем svn info вызывается один раз в конце и получает значение Path и URL. (Плюс использование -0 для предотвращения пробелов в именах файлов.)

find -type d -exec test -d "{}/.svn" \; -prune -print0 | xargs -0 svn info | grep -e '\(Path\|URL\)'
0 голосов
/ 08 ноября 2011
user_home=... # fill in the user's home dir
old_dir=/../
find $user_home -name .svn | rev | cut -f2- -d/ | rev | while read line ; do
    echo -n "$line"$'\t'
    wc -c <<<"$line"
done | sort -t$'\t' -k1,1 -k2,2n | while read dir size ; do
    if [[ $dir != $old_dir* ]] ; then
        old_dir=$dir
        svn info $dir | grep URL
        echo PATH: $dir
        echo
    fi
done

Просто надеюсь, что пользователи не хранят SVN в каталогах с пробелами в именах.

0 голосов
/ 08 ноября 2011

В зависимости от того, какие у вас ограничения, могут быть разные способы. Самым простым способом было бы сделать svn ls -R | grep -v "\.", чтобы получить все подпапки из местоположения репозитория, в котором вы находитесь, и передать его в цикл for, который добавляет URI к корню ls в начале каждого линия. Однако этого будет недостаточно, если у вас есть файлы, которые не содержат «.» поскольку они будут обнаружены как папки. К сожалению, svn ls не позволяет вам фильтровать по файлам / папкам, поэтому, если вам нужно иметь дело с именами файлов без расширений, вам придется сделать что-то другое, например, проверить исходный код и использовать find для получения имен папок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...