Enumere todas las URL del repositorio SVN de una carpeta en modo recursivo

Estamos buscando un script que recorra en modo recursivo todas las subcarpetas y enumere todas las URL del repositorio SVN y la ruta donde se encontró.

Se utilizará en la carpeta / home de un usuario.

preguntado el 08 de noviembre de 11 a las 13:11

3 Respuestas

Busque directorios de forma recursiva e intente obtener la información de SVN de cada uno de ellos. Si tiene éxito, no descienda al directorio e imprima el nombre del directorio.

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

Esto listará los directorios.

Si desea la información del repositorio, puede agregarla en medio del comando find exec.

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

Edit:

Encontré resultados mucho mejores solo probando la presencia de un .svn subdirectorio. Luego, svn info se llama una vez al final y se asigna a la ruta y la URL. (Además de usar -0 para evitar espacios en los nombres de archivo).

find -type d -exec test -d "{}/.svn" \; -prune -print0 | xargs -0 svn info | grep -e '\(Path\|URL\)'

respondido 08 nov., 11:18

¿Cómo lees la URL? No puedo ubicar svn info | grep URL en tu guion? - Pentium10

Esto imprimirá los directorios. Si quieres la URL, llama svn info en cada uno de ellos. - Didier Trosset

Quiero la carpeta y la URL juntas. Pero la URL es la más importante. - Pentium10

Esto empieza a funcionar. Que hace eso svn info {} 2 ¿significar? ¿Qué es eso {} y qué significa 2 aquí? - Pentium10

Todavía sólo se obtiene ".", Excepto el último que no imprime nada pero devuelve el error 123. Claramente, tiene una configuración diferente, pero sería útil saber qué está causando que no funcione. - Thor84no

Dependiendo del tipo de limitaciones que tenga, podría haber diferentes formas. La forma más fácil sería hacer svn ls -R | grep -v "\." para tomar todas las subcarpetas de la ubicación del repositorio en el que se encuentra y enviarlas a un for bucle que agrega el URI a la raíz de ls al principio de cada línea. Sin embargo, esto no será adecuado si tiene archivos que no contienen un "." ya que se detectarán como carpetas. Desafortunadamente svn ls no le permite filtrar por archivo / carpeta, por lo que si necesita lidiar con nombres de archivo sin extensiones, entonces tendrá que hacer algo diferente, como verificar la fuente y usar buscar para obtener los nombres de las carpetas.

respondido 08 nov., 11:18

La carpeta actual en la que estoy, no es un repositorio SVN, pero podría tener en uno de sus descendientes: Pentium10

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

Solo espero que los usuarios no almacenen SVN en directorios con espacios en los nombres.

respondido 08 nov., 11:18

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.