No BASH, você pode usar a barra final (acho que ele deve funcionar em qualquer shell POSIX):
rm -R -- */
Observe o -- que separa opções de argumentos e permite remover entradas iniciando com um hífen - caso contrário, após a expansão pelo shell, o nome da entrada seria interpretado como uma opção por rm (o mesmo vale para muitos outros utilitários de linha de comando).
Adicione a opção -f se você não quiser ser solicitado a confirmar ao excluir arquivos não graváveis.
Observe que, por padrão, os diretórios ocultos (aqueles cujo nome começa com . ) serão deixados em paz.
Uma ressalva importante: a expansão de */ também incluirá links simbólicos que eventualmente serão resolvidos para arquivos do tipo diretório . E dependendo da implementação de rm , rm -R -- thelink/ irá simplesmente deletar o symlink, ou (na maioria deles) deletará o conteúdo do diretório vinculado de forma recursiva, mas não o próprio diretório nem o symlink.
Se estiver usando zsh , uma abordagem melhor seria usar um glob qualifier para selecionar apenas arquivos do tipo diretório:
rm -R -- *(/) # or *(D/) to include hidden ones
ou:
rm -R -- *(-/)
para incluir links simbólicos para diretórios (mas porque, desta vez, a expansão não possui / s, é apenas o link simbólico que é removido com todas as implementações rm ).
Com bash , AT & T ksh , yash ou zsh você pode fazer:
set -- */
rm -R -- "${@%/}"
para remover o / .