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: