Tem o GNU?
A versão do gnu de ls tem --group-directories-first . E cp tem -t .
Não GNU?
Em sistemas que não têm ls do gnu, sua melhor opção é duas chamadas sucessivas para find com -maxdepth n / -mindepth n e -type t com as opções apropriadas.
find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d
Para copiar arquivos, primeiro com o destino, você teria que escrever um script que salvasse o primeiro argumento, depois usasse shift e anexasse o argumento ao final.
#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"
Cuidado!
Se você planeja usá-los juntos, ou seja, coletar a lista de find ou ls (possivelmente usando xargs ) e passá-la para cp (ou um cp wrapper), você deve estar ciente do que os perigos estão na análise de listas de arquivos (basicamente, nomes de arquivos podem conter caracteres como novas linhas que podem atrapalhar seu script ). Especificamente, veja as opções find -exec e -print0 e xargs -0 .
Uma ferramenta alternativa para copiar com eficiência as árvores de diretórios.
Você pode querer usar o rsync ; tem muitas funcionalidades que podem facilitar o seu trabalho.