найти все подрывные рабочие копии на машине - PullRequest
4 голосов
/ 25 января 2010

Как можно использовать утилиту find unix, чтобы найти все рабочие копии на машине?Например, я могу использовать команду find / -name .svn -type d, но она выводит все избыточные результаты (множество подпапок), в то время как мне нужен только родительский каталог рабочей копии, который будет показан.

Есть связанный вопрос, но он не очень помогает в моем случае: Как найти корневую папку заданной рабочей копии Subversion

Ответы [ 4 ]

6 голосов
/ 25 января 2010

Обновление 3 - отсортированный вывод команды find, чтобы гарантировать, что .svn предшествует скрытым файлам. все еще может потерпеть неудачу для отмеченных скрытых каталогов.


Perl может удалить для вас вложенные пути:

find -s . -ipath *.svn | perl -lne's!/\.svn$!!i;$a&&/^$a/||print$a=$_'

В человеке это говорит: для каждого пути svn, игнорируя часть /.svn, если текущий путь является потомком последнего пути Я напечатал , не печатайте его.

пример: для структуры каталогов:

$ find .
.
./1
./1/.svn
./1/1
./1/1/.svn
./2
./2/.svn
./3

это дает

./1
./2
5 голосов
/ 25 января 2010

может быть как то так?

#!/bin/bash
if [ -d "$1/.svn" ]; then
        echo $1
else
        for d in $1/*
        do
                if [ -d "$d" ]; then
                        ( $0 $d )
                fi;
        done
fi;

назовите его, например, - find_svn.sh, сделайте его исполняемым и вызовите как ./find_svn.sh /var/www (может потребоваться некоторая подстройка для нормализации имен каталогов, косая черта в конце ... но у меня это работает, когда Вызван какой-нибудь режиссер без косой черты).

1 голос
/ 10 июля 2016

Следующее работает для меня просто отлично. Он также находит все разреженные проверки (или вложенные рабочие копии).

find $PWD -type d -wholename "*/.svn" |
while read path
do
    path=${path%%/.svn}
    wcr=$(svn info ${path} 2>/dev/null | perl -F"/:\s/" -le '{ print $F[1] if $F[0] =~ /^Working Copy Root/;  }')
    [ "$path" = "$wcr" ] && {
        echo -e "\n  WC Root $path"; svn stat -qu $path;
        }
done
1 голос
/ 26 января 2010

если у вас есть GNU найти / отсортировать

find /path -type f -name ".svn*" -printf "%h\n"  | sort -u
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...