У меня два вопроса. Во-первых, какая команда перечисляет файлы и каталоги, но сначала перечисляет каталоги?
Второй вопрос: я хочу скопировать список файлов в один каталог, но сделать целевой каталог первым именем файла в команде.
command-line
shell-script
ls
Эльхам Аббаси
источник
источник
ls
имеет--group-directories-first
переключатель-t
это, возможно, опция только для GNU,cp
которая принимает явный целевой каталог и, следовательно, может находиться в любом месте командной строки, включая начало.Ответы:
Есть GNU?
Гну версия
ls
имеет--group-directories-first
. Иcp
имеет-t
.Нет GNU?
В системах, в которых нет gnu
ls
, лучше всего делать два последовательных вызоваfind
с-maxdepth n
/-mindepth n
и-type t
с соответствующими параметрами.Для копирования файлов, сначала с целью, вам нужно написать скрипт, который сохраняет первый аргумент, затем использует
shift
и добавляет аргумент в конец.Осторожно!
Если вы планируете использовать их вместе - то есть собирать список из
find
илиls
(возможно, используяxargs
) и передавать егоcp
(илиcp
оболочку), вы должны знать о том, какие опасности лежат в разборе списков файлов (в основном, имена файлов могут содержит символы, такие как переводы строк, которые могут испортить ваш сценарий). В частности, посмотрите наfind
's-exec
и-print0
варианты иxargs
'-0
вариант.Альтернативный инструмент для эффективного копирования деревьев каталогов.
Вы можете захотеть использовать
rsync
вместо этого; он имеет множество функций, которые могут облегчить вашу работу.источник
--group-directories-first
).ls --version
чтобы узнать, какой у вас есть.Сначала перечислите каталоги для не-GNU
ls
:ls -l | sort
Обратите внимание, что здесь будут перечислены все другие странные вещи, такие как символические ссылки, сокеты и каналы (естественно, сгруппированные, конечно), но, учитывая, что это довольно редко, это не должно быть проблемой. В противном случае фильтр будет
ls -l | grep '^(-|d)' | sort
источник
sort -r
.работает для bash и zsh
просто добавьте псевдоним в ~ / .bashrc или ~ / .zshrc
Также, если у вас есть ZSH, вы можете использовать утилиту "k"
просто установите его с антигеном, поместив следующее в ~ / .zshrc
источник
Для
zsh
списков завершения вы можете установитьlist-dirs-first
стильtrue
для каталогов, которые будут отображаться первыми. В вашем~/.zshrc
:(здесь применяется ко всем виджетам завершения, которые его поддерживают, и ко всем командам; вы можете ограничить это, если хотите, см.
zstyle
документацию)Если вы еще этого не сделали, запустите
compinstall
также, чтобы получить цветные списки завершения, с описаниями и т. Д., А также со всеми другими вкусностями.источник
Для не-GNU awk может фильтровать все остальные поля:
ls -l
должен содержать 9 полейВывод выглядит так,
ls -1
но каталоги ставятся первыми:Согласно «Длинному формату» справочной страницы ls, когда задействованы другие типы файлов, порядок вывода должен быть:
Удобная функция bash (поместите ее в ваш .bash_profile или .bashrc):
источник