Aqui estão alguns requisitos para que possamos fazer isso com segurança:
- remover subdiretórios primeiro e depois diretórios de nível superior, ou seja, precisamos classificar a listagem de diretórios ou usar rmdir --parents flag
- inicie ROOTDIR sempre com / ou ./ para evitar surpresas com arquivos que começam com -
- use a lista de diretórios terminados pelo NUL para trabalhar com nomes de diretórios com espaços
Aqui está como eu faria isso no shell:
find ./ROOTDIR -type d | sort -r | tr '\n' 'find ./ROOTDIR -type d -print0 | xargs -0 rmdir --ignore-fail-on-non-empty --parents
0' | xargs -0 rmdir --ignore-fail-on-non-empty
Se você não se importa com alguns erros redundantes, então você pode forçar a remoção de todos os diretórios com os pais e você não precisa fazer nenhuma classificação (você não pode classificar strings terminadas em NUL, o que adiciona tr)
find ./ROOTDIR -type d | sort -r | tr '\n' 'find ./ROOTDIR -type d -print0 | xargs -0 rmdir --ignore-fail-on-non-empty --parents
0' | xargs -0 rmdir --ignore-fail-on-non-empty