Come posso eliminare tutte le directory vuote


11

(su un sistema Linux)

Ho un ampio set di sottodirectory nidificate su un filesystem. Vorrei eliminare tutti i percorsi di directory che non contengono alcun file.

In altre parole, vorrei eliminare ricorsivamente ogni directory in cui non ci sono file in quella directory o in qualsiasi sottodirectory di quella directory.

Risposte:


15

Per tutte le versioni di find

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

Se hai una versione più recente

 find -type d -empty -delete

bello, non conoscevo la -deletebandiera.
ansi_lumen

Neanche io. Ho imparato qualcosa di nuovo. Ho già scritto degli script, usando la ricorsione per trovare directory vuote. Questo semplifica notevolmente tale compito.
James,

2
la bandiera vuota aiuta davvero qui. Funziona anche per trovare file vuoti se non includi il -tipo d o hai appena usato -tipo f
Mike

1

Potrebbe non essere la soluzione migliore, ma questo script funziona:

#!/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

(basato in parte sulla risposta a Elenca tutte le cartelle vuote )


1
Mi è appena venuto in mente che questo andrà in un ciclo infinito se non si dispone dell'autorizzazione per rimuovere una delle directory vuote, quindi utilizzare invece la risposta accettata :)
AndrewR

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

Chiudi, ma niente sigaro. Manca il caso in cui la rimozione di una directory fa svuotare il suo genitore.
Simon Richter,

È vero. findLi farei in una seconda manche. Non ho mai avuto questo caso in diretta.
ansi_lumen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.