каталог unix ls с подкаталогом существует

В Unix возможно ли использовать одну команду ТОЛЬКО для отображения каталога, если существует подкаталог?

Например, я хотел бы указать имя каталога, если он содержит подкаталог с именем «division_A».

/data/data_file/form_100/division_A
/data/data_file/form_101/division_A
/data/data_file/form_102/division_A

Желаемый результат будет

form_100 
form_101 
form_102

Я могу использовать только 2 командные строки для реализации цели.

cd /data/data_files
echo `ls -d */division_A 2> /dev/null | sed 's,/division_A,,g'`

Поэтому я хотел бы спросить, может ли кто-нибудь использовать одну команду для продолжения.

Огромное спасибо!


person Newbiee    schedule 02.08.2013    source источник
comment
Прелесть Unix в том, что он предоставляет вам набор строительных блоков. Вы можете написать инструмент, который делает все, что вы хотите, а затем вызвать его как одну команду.   -  person William Pursell    schedule 02.08.2013


Ответы (2)


Использование find:

find /data/data_file -type d -name division_A -exec sh -c 'basename `dirname {}`' \; 2> /dev/null
person falsetru    schedule 02.08.2013
comment
Ой, мой плохой. Я неправильно понял задание, которое означает, что оно содержит любой каталог, и в этом случае вы, вероятно, получите дублирующиеся базовые пути. - person mabi; 02.08.2013

Если вы не возражаете против странного .., вы можете просто сделать:

$ ls -d /data/data_file/*/division_A/..

Он выведет что-то вроде /data/data_file/form_100/division_A/.., и вы сможете получить к нему доступ, как к обычным папкам.

person Jiaming Lu    schedule 02.08.2013