Как "ls" только на один уровень? - PullRequest
25 голосов
/ 07 февраля 2011

У меня есть много подкаталогов, содержащих данные, и я хочу получить краткий список заданий, которые у меня есть Я не доволен следующей командой.

$ 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/

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

Ответы [ 5 ]

36 голосов
/ 07 февраля 2011

Попробуйте это

ls -d H2*/

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

.

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

ОБНОВЛЕНИЕ : Как отмечает @Philipp, вы можете сделать это еще более кратко и не выходя из bash, сказав

echo H2*/

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

15 голосов
/ 07 февраля 2011

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

find . -type d -maxdepth 1 -name "H2*"
11 голосов
/ 07 февраля 2011
echo H2*

Расширение выполняет Bash, поэтому вам даже не нужно ls.

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

echo H2*/
3 голосов
/ 11 мая 2012

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

tree -adi -L 1 H2*
2 голосов
/ 07 февраля 2011

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

ls | grep H2*
...