Как сначала просмотреть файлы и каталоги с каталогами

У меня есть два вопроса. Во-первых, какая команда перечисляет файлы и каталоги, но сначала перечисляет каталоги?

Второй вопрос: я хочу скопировать список файлов в один каталог, но сделать целевой каталог первым именем файла в команде.

Получил GNU?

В версии gnu ls есть --group-directories-first . И cp имеет -t .

Нет GNU?

В системах, которые не имеют gnu's 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 обертку), вы должны знать, какие опасности лежат в разборе списков файлов (в основном, имена файлов могут содержать символы, такие как символы новой строки, которые могут испортить ваш скрипт). В частности, -print0 опции -exec и -print0 и xargs -0 .

Альтернативный инструмент для эффективного копирования деревьев каталогов.

Возможно, вам стоит взглянуть на использование rsync ; он имеет множество функций, которые могут облегчить вашу работу.

Список каталогов сначала для не-GNU ls :

ls -l | sort

Обратите внимание: в этом списке будет отображаться все множество других странных вещей, таких как символические ссылки, сокеты и каналы (конечно, сгруппированные, конечно), но, учитывая, что материал довольно редок, это не должно быть проблемой. В противном случае фильтр будет ls -l | grep '^(-|d)' | sort ls -l | grep '^(-|d)' | sort

работает для bash и zsh

просто добавьте псевдоним в ~ / .bashrc или ~ / .zshrc

 # Colorize the ls output ## alias ls='LC_COLLATE=C ls -h --group-directories-first --color=auto'