Como faço para excluir todos os diretórios vazios


11

(em um sistema Linux)

Eu tenho um grande conjunto de subdiretórios aninhados em um sistema de arquivos. Gostaria de remover todos os caminhos de diretório que não contêm arquivos.

Em outras palavras, eu gostaria de excluir todos os diretórios onde não há arquivos nesse diretório ou em qualquer subdiretório desse diretório recursivamente.

Respostas:


15

Para todas as versões do find

find -depth -type d -empty -exec rmdir {} \;

Se você tem uma versão mais recente

 find -type d -empty -delete

legal, não conhecia a -deletebandeira.
Ansi_lumen

Nem eu. Eu aprendi algo novo. Eu escrevi scripts antes, usando a recursão para encontrar diretórios vazios. Isso simplifica bastante essa tarefa.
James

2
ya a bandeira -vazy realmente ajuda aqui. Ele também funciona para encontrar arquivos vazios se você não incluiu o -type d ou apenas utilizado -type f
Mike

1

Pode não ser a melhor solução, mas este script funciona:

#!/bin/sh

while true
do
    DIRS=`find . -xdev -type d -exec find {}  -maxdepth 0 -empty  \;`
    if [ -z "$DIRS" ]; then
        exit 0
    else
        echo $DIRS | xargs rmdir
    fi
done

(baseado parcialmente na resposta para Listar todas as pastas vazias )


1
Apenas me ocorreu que este vai entrar em um loop infinito se você não tem permissão para remover qualquer um dos diretórios vazios, portanto use a resposta aceita vez :)
AndrewR

0
for i in `find -type d -empty`; do rmdir $i; done

Perto, mas sem charuto. Está faltando o caso em que a remoção de um diretório faz com que seu pai fique vazio.
Simon Richter

Isso é verdade. Eu os faria findem uma segunda corrida. Nunca tive esse caso ao vivo.
Ansi_lumen
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.