2011-11-08 15 views

Respuesta

4

Encuentra recursivamente directorios, y para cada uno de ellos intenta obtener la información SVN. 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 el medio del comando find exec.

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

Editar:

he encontrado mucho mejores resultados en sólo probando la presencia de un subdirectorio .svn. Luego, se llama al svn info una vez al final y se extrae para la ruta y la URL. (Plus usando -0 para prevenir de los espacios en los nombres de archivo.)

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

¿Cómo se lee la URL? No puedo localizar 'svn info | grep URL' en tu script? – Pentium10

+0

Esto imprimirá los directorios. Si quieres la URL, llama a 'svn info' en cada una de ellas. –

+0

Quiero la carpeta y la URL juntas. Pero la url es lo más importante. – Pentium10

0

Dependiendo de qué tipo de limitaciones que tiene podría haber diferentes maneras. 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 la que se encuentra y alimentar eso en un bucle for que agrega el URI a la raíz del ls al frente 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 tratar con nombres de archivos sin extensiones, entonces tendría que hacer algo diferente, como consultar la fuente y usar find para obtener los nombres de las carpetas.

+0

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

0
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 debajo de los directorios con espacios en los nombres.

Cuestiones relacionadas