Tengo un directorio en mi máquina con Windows 7 que tiene cientos, si no miles, de subdirectorios. Algunos de ellos tienen archivos, otros no. Quiero eliminar todos los directorios vacíos.
Mirando el comando del y rmdir DOS, no parece que puedas hacer esto de forma recursiva sin eliminar todos los archivos. ¿Hay alguna manera de hacer esto desde la línea de comando?
windows
command-line
Mohlsen
fuente
fuente
xcopy FROMDIR TODIR /s
. Vea esta respuesta SO: stackoverflow.com/a/14742810Respuestas:
Puede usar la utilidad Eliminar directorios vacíos .
Alternativamente, puede usar este archivo por lotes de una línea (de DownloadSquad ):
(si se usa dentro de un archivo por lotes, reemplácelo
%d
con%%d
)Esto funciona porque
rd
no eliminará un directorio que contenga archivos.fuente
También puedes usar ROBOCOPY. Es muy simple y también se puede usar para eliminar carpetas vacías dentro de una jerarquía grande.
Aquí se encuentran tanto el origen como el destino
folder1
, ya que solo necesita eliminar carpetas vacías, en lugar de mover otros archivos a una carpeta diferente./S
La opción es omitir la copia (mover, en el caso anterior) carpetas vacías. También es más rápido ya que los archivos se mueven dentro de la misma unidad.fuente
folder1
? Miedo, a menos que se haya probado bien./MOVE
primero copia los archivos y luego elimina el archivo fuente después de copiar. Entonces, como/S
se usa, copia las carpetas no vacías al destino (la misma carpeta en el caso anterior). Luego, elimina las carpetas vacías (como si pensara que las carpetas vacías ya se han copiado). No, no mueve las carpetas anidadasfolder1
, ya que ROBOCOPY mueve las carpetas de forma recursiva.Como Cygwin viene con GNU find, puedes hacer esto:
O para evitar el ruido cuando una carpeta ya no existe:
fuente
find . -type d -empty -delete
) falla desde el símbolo del sistema con el siguiente error:FIND: Parameter format not correct
La utilidad gratuita EmptyFolderNuker hace esto bien, desde una carpeta base de su elección. También elimina aquellos directorios que solo contienen subdirectorios vacíos.
fuente
"%~dp0\EmptyFolderNuker.exe" %cd%
.Si tiene instalado Cygwin , puede hacer esto:
fuente
find
(starting-directory)
-depth
-type d ...
-depth
find
Si está trabajando en emacs (haciendo que esta plataforma sea independiente), lo siguiente funciona:
fuente
D
si quisiera, pero como no tengo una necesidad común de esto, todo lo que tengo que escribir esM-x *ded RET
bam – done. (Si realmente tuviera que escribir esto cada vez, tiene toda la razón de que sería absurdo, afortunadamente ese no es el caso)M-x *ded RET
Tiene algún significado o es al azar? Si es esto último, ¿cómo realiza un seguimiento de todos los accesos directos que ha asignadoemacs
? ¿Es suficiente la memorización o tienes que buscarlos?*ded
es una abreviatura para el nombre completo de la función*-delete-empty-directories
. Muchos motores de terminación (como la hiedra, la que uso) entienden este tipo de coincidencia difusa. En cuanto a mantenerlos memorizados ... Simplemente no tengo que hacerlo. Todas las funciones que he definido comienzan por*
lo que puedo encontrarlas fácilmente si no están vinculadas a una tecla. De lo contrario, el propio emacs me dirá si había una forma más rápida de llamar a la función. Si todo lo demás falla, siempre hayapropos
.Combinando las publicaciones de Gareth y G-Man:
Editar: Pero eso dio un error de seguridad debido a 'C' en mi PATH var ... así que en su lugar:
No uso xargs porque parece tener un límite de línea de entrada (de aproximadamente 1024 líneas, creo), mientras que
solo continúa mientras tenga entrada. Omita el indicador detallado '-v' si no desea ver los resultados o desea que se ejecute más rápido.
fuente
Hmmm ... tal vez una solución aún más simple:
for /d /r %d in (*.*) do rd "%d"
Comience esto desde la carpeta que desea que se eliminen las carpetas vacías.
/ d: funcionará en carpetas, no en archivos / r: repetirá subdirecciones
fuente