Eu adicionaria isso como um comentário à resposta de Thomas Watnedal , mas ainda não posso.
Um pequeno problema com ele (que não afetará o Windows) é que ele verifica apenas arquivos ou diretórios. Para sistemas tipo Unix onde links simbólicos podem estar presentes, é necessário mudar a linha:
if os.path.isfile(fullpath):
para
if os.path.isfile(fullpath) or os.path.islink(fullpath):
para também remover links.
Para mim, mudar a última linha if match: removeall(match.group(1))
para
if match:
print "Removing " + match.group(1)
removeall(match.group(1))
para que ele exiba o que está removendo também foi útil.
Dependendo do caso de uso, a ?[\?ID]
parte da expressão regular pode ser melhor ?[\?I]
, pois D
também remove arquivos excluídos que estavam sob controle de versão. Quero usar isso para criar uma pasta limpa e com check-in, de modo que não haja arquivos em um D
estado.