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.