Elimine todas las carpetas vacías, incluso las que contengan carpetas .svn

Elimine todas las carpetas vacías, incluso las que contengan carpetas .svn

Estoy intentando eliminar todas las carpetas vacías dentro de un directorio. Sin embargo, find . -type f -emptyno encuentra nada porque cada carpeta contiene una .svncarpeta oculta.

¿Cómo puedo solucionar esto?

Respuesta1

Si puede, por supuesto, primero puede eliminar todas .svnlas carpetas. Desventaja: perderá información de control de versiones si alguien usa SVN. Si alguien está usando SVN, entonces no es una buena idea simplemente eliminar esas carpetas (o en realidad también debe eliminarlas de SVN, ya que SVN rastrea carpetas y archivos).

Si eso no es posible, optaría por la ruta de secuencias de comandos:

for folder in $(find . -type d); do
 if [ "`ls $folder | wc -l`" -eq 0 ]; then
  echo "I am going to delete $folder"
 fi
done

Primero intente realizar una prueba, porque podría haber algo sorprendente. Entonces puedes cambiar rm -ren lugar de eso echo.

Sin embargo, tenga en cuenta que esto eliminará todas las carpetas que solo contengan archivos de puntos (por ejemplo a/.this_is_super_important, se eliminarán si no hay otros archivos o carpetas).

Respuesta2

Modificación menor (simplemente imprima el directorio y transfiéralo xargsmás tarde):

for folder in $(find -type d ! -path *.svn*); do
  if [ "`find $folder ! -path *.svn* ! -path $folder | wc -l`" -eq 0 ]; then
    echo $folder
  fi
done

Pon esto en algún lugar de tu $PATH, tal vez como svn-emptiesy luego ejecuta primero:

svn-empties

para enumerar qué directorios encontró (modifique la lista si es necesario) y luego canalice a xargs:

svn-empties | xargs svn rm

Este script me ha resultado muy útil mientras lo uso git-svn(¡gracias!). Como gitno rastrea directorios vacíos, puedo terminar con muchos directorios vacíos en el repositorio de Subversion. Hago svn couna copia separada del repositorio y la ejecuto svn-empties | xargs svn rmperiódicamente. Usar Subversion en primer lugar no fue mi decisión;)

Respuesta3

Me encontré con esto y utilicé este script, pero lo modifiqué para considerar correctamente los directorios vacíos solo los que tienen .svn y ningún otro archivo, oculto o normal.

Además, tenga en cuenta que estoy usando svn rm, por lo que se supone que funciona en un repositorio; podría adaptar el script para hacer algo diferente en el directorio.

for folder in $(find -type d ! -path *.svn*); do
  if [ "`find $folder ! -path *.svn* ! -path $folder | wc -l`" -eq 0 ]; then
    svn rm $folder
  fi
done

Respuesta4

  1. resolvió el problema que: espacios en la ruta
  2. Puede llamar al script con el parámetro PATH como este:

svn-empties YOU_WANT_TO_SEARCH_PATH

C_IFS=$IFS

IFS=$'\n'

for folder in $(find "$1" -depth -type d ! -path *.svn*|sort -r); do
  counts=$(find "$folder" -type f ! -path *.svn* ! -path $folder | wc -l)

  if [ $counts -eq 0 ]; then
    echo $folder
  fi

done

IFS=$C_IFS

información relacionada