Есть 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
переключатель