Usando o não-GNU find (mas ainda alguma implementação que suporta -mindepth , como find em sistemas BSD):
find top-dir -depth -mindepth 1 -type d -exec sh -c '
for pathname do
subdir=$pathname/${pathname##*/}
if [ -d "$subdir" ]; then
printf "Would remove directory %s\n" "$subdir"
# rm -rfi "$subdir"
fi
done' sh {} +
Isso faria uma travessia em profundidade da hierarquia de diretórios com raiz em top-dir . Para lotes de nomes de diretórios encontrados, um script de shell curto seria chamado. Em cada iteração do loop no shell script curto, o nome do caminho de um subdiretório dentro do diretório $pathname que possui o mesmo nome do próprio diretório é construído. Se esse subdiretório existir, será relatado (a exclusão está sendo comentada para segurança).
A opção -depth faz um percurso em profundidade primeiro. Geralmente, isso é o que você deseja quando exclui diretórios com find , pois find tentaria potencialmente entrar em diretórios que você já excluiu.
A opção -mindepth 1 garante que o diretório principal não seja excluído, já que você usaria . como o caminho de pesquisa inicial.
Relacionados: