Как "ls" только один уровень глубины?
У меня есть много подкаталогов, содержащих данные, и мне нужен короткий список заданий (подкаталогов), которые у меня есть. Я недоволен следующей командой.
$ ls H2*
H2a:
energy.dat overlap.dat
norm.dat zdip.dat ...
(much more)
H2b:
energy.dat overlap.dat
norm.dat zdip.dat ...
(much more)
Этот бесполезный беспорядок побеждает цель шаблона (ограничение выхода). Как я могу ограничить вывод на один уровень глубиной? Я хотел бы видеть следующий вывод
H2a/ H2b/ H2z/
Спасибо за вашу помощь,
Ник
Ответы
Ответ 1
Попробуйте это
ls -d H2*/
Параметр -d
должен указывать только "каталоги", но сам по себе просто перечисляет
.
который я лично считаю странным. Подстановочный шаблон необходим для получения фактического списка каталогов.
ОБНОВЛЕНИЕ. Как указывает @Philipp, вы можете сделать это еще более сжато и не выходя из bash, говоря
echo H2*/
Разница в том, что ls
будет печатать элементы на отдельных строках, что часто полезно для соединения с другими функциями.
Ответ 2
вам следует рассмотреть возможность использования find, например
find . -type d -maxdepth 1 -name "H2*"
Ответ 3
echo H2*
Это Bash, кто делает расширение, поэтому вам даже не нужно ls
.
Если у вас есть как файлы, так и каталоги, начиная с H2
, вы можете добавить косую черту, чтобы ограничить glob в каталогах:
echo H2*/
Ответ 4
Используйте tree
Стив Бейкер в http://mama.indstate.edu/users/ice/tree/
Он заполняет множество вещей, которые отсутствуют в ls
.
Чтобы перечислить каталоги на один слой:
tree -adi -L 1 H2*
Ответ 5
Возможно, это то, что вы ищете?
ls | grep H2*