Você não precisa enumerar recursivamente diretórios para excluí-los com rm -rf
; você pode simplesmente listar os diretórios de nível superior que você deseja excluir. Para determinar se uma entrada de diretório é um diretório em vez de um arquivo, você pode usar find
's -type d
test; usar .
não é um bom indicador.
O seguinte deve funcionar para você:
find * -maxdepth 0 ! -name encoded -type d -print0 | xargs -0 rm -rf
Isso inicia a partir de todas as entradas no diretório atual (para evitar a listagem .
), descarta qualquer nome cujo nome seja encoded
e mantém apenas diretórios; ele exibe o resultado usando um nulo como delimitador e alimenta o resultado em xargs
para fornecer a rm -rf
. Antes de executar essa variante, tente
find * -maxdepth 0 ! -name encoded -type d
para ver se a saída corresponde ao que você espera.
-prune
não ignora sua correspondência, evita descer para ela; Portanto, no seu exemplo, encoded
ainda está listado e, em seguida, filtrado pelo -name
test.