2014-11-24 3 views
4

Предположим, я следующую структуру каталогов:ЗШ GLOB отборочные в середине пути

$ mkdir -p a/1 
$ ln -s a b 

подстановку для каталогов, я получаю каталог в линке тоже:

$ print -l */*(/) 
a/1 
b/1 

Как можно ограничить globbing для первого уровня каталога только для каталогов, за исключением символических ссылок? Очевидное не работает:

$ print -l *(/)/*(/) 
zsh: bad pattern: *(/)/*(/) 

В целом, как я могу определить квалификаторы glob для промежуточных компонентов пути? В духе:

$ print -l a(...)/b(...)/c(...)/d(...)/e(...)/f(...) 

, где (...) обозначает отборочные Глоб для соответствующих компонентов пути.

+0

Возможно, особый случай того, что вы просите, но '' ** не следует символической ссылки. 'print -l **/1' в вашем примере будет соответствовать только' a/1', а не 'b/1'. – chepner

ответ

0

documentation предполагает, что отборочные GLOB может быть использован только в конце шаблона:

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

Хотя менее удобно, чем Glob, что вы пытаетесь достичь может быть сделано с find:

find -H . ! -path . -type d -links 2 | xargs 
./a/1 
Смежные вопросы