Есть GNU?
Гну версия lsимеет --group-directories-first. И cpимеет -t.
Нет GNU?
В системах, в которых нет gnu ls, лучше всего делать два последовательных вызова findс -maxdepth n/ -mindepth nи -type tс соответствующими параметрами.
find . -maxdepth 1 -mindepth 1 -type d
find . -maxdepth 1 -mindepth 1 \! -type d
Для копирования файлов, сначала с целью, вам нужно написать скрипт, который сохраняет первый аргумент, затем использует shiftи добавляет аргумент в конец.
#!/bin/sh
target="$1"
shift
cp -r -- "$@" "$target"
Осторожно!
Если вы планируете использовать их вместе - то есть собирать список из findили ls(возможно, используя xargs) и передавать его cp(или cpоболочку), вы должны знать о том, какие опасности лежат в разборе списков файлов (в основном, имена файлов могут содержит символы, такие как переводы строк, которые могут испортить ваш сценарий). В частности, посмотрите на find's -execи -print0варианты и xargs' -0вариант.
Альтернативный инструмент для эффективного копирования деревьев каталогов.
Вы можете захотеть использовать rsyncвместо этого; он имеет множество функций, которые могут облегчить вашу работу.
lsимеет--group-directories-firstпереключатель