Отримав GNU?
Версія gnu ls
має --group-directories-first
. І cp
має -t
.
Ні 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
' s -0
варіант.
Альтернативний інструмент для ефективного копіювання дерев каталогів.
Ви можете rsync
замість цього використати ; він має багато функціональних можливостей, які можуть полегшити вашу роботу.
ls
має--group-directories-first
вимикач.