Agregaría esto como un comentario a la respuesta de Thomas Watnedal. , pero aún no puedo.
Un problema menor con él (que no afectará a Windows) es que solo busca archivos o directorios. Para sistemas similares a Unix donde pueden estar presentes enlaces simbólicos, es necesario cambiar la línea:
if os.path.isfile(fullpath):
a
if os.path.isfile(fullpath) or os.path.islink(fullpath):
para eliminar también los enlaces.
Para mí, cambiar la última línea if match: removeall(match.group(1))
por
if match:
print "Removing " + match.group(1)
removeall(match.group(1))
para que muestre lo que está eliminando también fue útil.
Dependiendo del caso de uso, la ?[\?ID]
parte de la expresión regular puede ser mejor ?[\?I]
, ya que D
también elimina los archivos eliminados, que estaban bajo control de versiones. Quiero usar esto para compilar en una carpeta limpia y registrada, por lo que no debería haber archivos en un D
estado.