Eu tenho um diretório na minha máquina Windows 7 que possui centenas, se não milhares, de subdiretórios. Alguns deles têm arquivos, outros não. Eu quero excluir todos os diretórios vazios.
Observando o comando del e rmdir DOS, não parece que você pode fazer isso recursivamente sem excluir todos os arquivos. Existe uma maneira de fazer isso na linha de comando?
windows
command-line
Mohlsen
fonte
fonte
xcopy FROMDIR TODIR /s
. Veja esta resposta do SO: stackoverflow.com/a/14742810Respostas:
Você pode usar o utilitário Remover Diretórios Vazios .
Como alternativa, você pode usar este arquivo em lotes de uma linha (do DownloadSquad ):
(se usado dentro de um arquivo em lotes, substitua
%d
por%%d
)Isso funciona porque
rd
não removerá um diretório que contém arquivos.fonte
Você também pode usar o ROBOCOPY. É muito simples e também pode ser usado para excluir pastas vazias dentro de uma grande hierarquia.
Aqui, tanto a origem quanto o destino são
folder1
, pois você só precisa excluir pastas vazias, em vez de mover outros arquivos para uma pasta diferente./S
A opção é pular a cópia (movendo, no caso acima) de pastas vazias. Também é mais rápido à medida que os arquivos são movidos dentro da mesma unidade.fonte
folder1
? Assustador, a menos que testado bem./MOVE
copia os arquivos primeiro e exclui o arquivo de origem após a cópia. Portanto, conforme/S
é usado, ele copia as pastas não vazias para o destino (mesma pasta no caso acima). Em seguida, ele exclui as pastas vazias (como pensar que as pastas vazias já foram copiadas). Não, ele não move pastas aninhadasfolder1
, pois o ROBOCOPY move as pastas recursivamente.Como o Cygwin vem com o GNU find, você pode fazer o seguinte:
Ou para evitar o barulho quando uma pasta não existir mais:
fonte
find . -type d -empty -delete
) falha no prompt de comando com o seguinte erro:FIND: Parameter format not correct
O utilitário gratuito EmptyFolderNuker faz isso muito bem, a partir de uma pasta base de sua escolha. Ele também remove os diretórios que contêm apenas subdiretórios vazios.
fonte
"%~dp0\EmptyFolderNuker.exe" %cd%
.Se você tiver o Cygwin instalado, poderá fazer o seguinte:
fonte
find
(starting-directory)
-depth
-type d ...
-depth
find
Se você estiver trabalhando no emacs (tornando esta plataforma independente), o seguinte funciona:
fonte
D
se quisesse, mas como não tenho uma necessidade comum disso, tudo o que tenho que digitar éM-x *ded RET
e pronto. (Se eu realmente tinha que digitar isso toda vez, você está absolutamente certo de que seria absurdo - felizmente isso não é o caso.)M-x *ded RET
algum significado ou é aleatório? Nesse último caso, como você controla todos os atalhos atribuídosemacs
? A memorização é suficiente ou você precisa procurá-las?*ded
é uma abreviação para o nome completo da função*-delete-empty-directories
. Muitos mecanismos de conclusão (como o ivy, o que eu uso) entendem esse tipo de correspondência difusa. Quanto a mantê-los memorizados ... eu simplesmente não preciso. As funções que defini são iniciadas*
para que eu possa encontrá-las facilmente se não estiverem vinculadas a uma tecla. Caso contrário, o emacs em si me dirá se houve uma maneira mais rápida de chamar a função. Se tudo mais falhar, sempre haveráapropos
.Combinando as postagens de Gareth e G-Man:
Edit: Mas isso deu um erro de segurança por causa de 'C' na minha PATH var ... então, em vez disso:
Eu não uso xargs porque parece ter um limite de linha de entrada (de cerca de 1024 linhas, eu acho?), Enquanto
apenas continua enquanto houver entrada. Deixe de fora o sinalizador detalhado '-v' se você não deseja ver os resultados e / ou deseja que ele seja executado mais rapidamente.
fonte
Hmmm ... talvez solução ainda mais simples:
for /d /r %d in (*.*) do rd "%d"
Comece isso na pasta em que deseja excluir as pastas vazias.
/ d - funcionará em pastas, não em arquivos / r - recursará subdiretórios
fonte