2011-02-07 3 views
21

У меня есть много подкаталогов, содержащих данные, и я хочу получить короткий список заданий (подкаталогов), которые у меня есть. Я недоволен следующей командой.Как `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/ 

Спасибо за вашу помощь, Ник

ответ

34

Попробуйте

ls -d H2*/ 

Опция -d должна перечислить «каталоги только», но сам только списки

. 

который я лично я нахожу странным. Подстановочный шаблон необходим для получения фактического списка каталогов.

UPDATE: Как @Philipp указывает, что вы можете сделать это еще более лаконично и, не выходя из Баш говоря

echo H2*/ 

Разница заключается в том, что ls напечатает элементы на отдельных строках, которые часто полезно для трубопроводов для других функций.

+3

Если MYDIR это имя каталога, и вы выполняете «Ls MYDIR», Ls показывает содержимое Mydir. Если вы выполните 'ls -d mydir', тогда ls показывает списки mydir, не показывая его содержимое. Теперь, если не указан каталог или подстановочный знак, то ls работает на '.' (т. е. текущий каталог) по умолчанию. Таким образом, 'ls -d' эквивалентен 'ls -d.', Который должен содержать список '.' не показывая его содержимое. Надеюсь, это немного объяснит, почему требуется имя каталога или подстановочный знак. –

+0

@Mansoor, спасибо за объяснение, это имеет смысл. – harpo

+0

Параметр -d превосходит решение эха, если вы хотите объединить его, например. -l для длинного списка, чтобы увидеть права доступа к папке. Огромное спасибо! –

10
echo H2* 

Это Bash, который делает расширение, так что вам даже не нужно ls.

Если у вас есть оба файла и директории, начиная с H2, вы можете добавить слэш ограничить Glob к каталогам:

echo H2*/ 
+0

Интересный момент. Но это будут файлы, начинающиеся с «H2», и OP хочет только подкаталоги. – harpo

+0

@harpo: хорошо, я отредактировал свой ответ – Philipp

2

Возможно, это то, что вы ищете?

ls | grep H2* 
+1

Идеально подходит для меня. Также позволяет делать такие вещи, как 'ls -l | grep pattern'. –

13

вы должны рассмотреть использование найти, как

find . -type d -maxdepth 1 -name "H2*" 
+1

подумайте о том, чтобы положить -maxdepth before -type, ваша команда, вероятно, столкнется с предупреждением. Nevermind, неважно. –

3

Использование tree Стив Бейкер в http://mama.indstate.edu/users/ice/tree/ Он заполняет для многих вещей, которые отсутствуют ls. Чтобы вывести список директорий один слой глубокий:

tree -adi -L 1 H2* 
Смежные вопросы