
Estoy intentando eliminar todas las carpetas vacías dentro de un directorio. Sin embargo, find . -type f -empty
no encuentra nada porque cada carpeta contiene una .svn
carpeta oculta.
¿Cómo puedo solucionar esto?
Respuesta1
Si puede, por supuesto, primero puede eliminar todas .svn
las 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 -r
en 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 xargs
má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-empties
y 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 git
no rastrea directorios vacíos, puedo terminar con muchos directorios vacíos en el repositorio de Subversion. Hago svn co
una copia separada del repositorio y la ejecuto svn-empties | xargs svn rm
perió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
- resolvió el problema que: espacios en la ruta
- 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