Questo è davvero semplice:
find Parent -empty -delete
È abbastanza autoesplicativo. Anche se quando ho controllato sono rimasto sorpreso dal fatto che abbia eliminato con successo Parent/Child1. Di solito ti aspetteresti che elabori il genitore prima del figlio a meno che tu non specifichi -depth
.
Funziona perché -delete
implica -depth
. Vedere il manuale GNU find:
-delete
Cancella file; true se la rimozione è riuscita. Se la rimozione non riesce, viene emesso un messaggio di errore. Se -delete fallisce, lo stato di uscita di find sarà diverso da zero (quando alla fine uscirà). L'uso di -delete attiva automaticamente l'opzione -depth.
Nota che queste funzionalità non fanno parte dello standard Posix, ma molto probabilmente saranno presenti in molte distribuzioni Linux. Potresti avere un problema specifico con quelli più piccoli come Alpine Linux poiché sono basati su Busybox che non supporta -empty
.
Altri sistemi che includono -empty
non standard e -delete
includono BSD e OSX ma apparentemente non AIX.
Ecco una soluzione a due comandi
Elimina i file vuoti
find Parent/ -type f -size 0 -delete
Prova a rimuovere tutto directory
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>/dev/null
NB rmdir
non può rimuovere directory non vuote, quindi è sicuro da eseguire ma produrrà errori, che stiamo nascondendo
Come sopra, ma essendo un po' più specifico sui messaggi di errore che vengono ignorati. Potrebbe essere necessario modificare se il messaggio varia tra le distribuzioni.
find Parent/ -type d -depth -print0 | xargs -0 rmdir 2>&1 \
| grep -iv "Directory not empty$"
Puoi farlo anche con fd
strumento:
fd -t e -x rm -r
https://github.com/sharkdp/fd