Как перечислить все подкаталоги со строкой, но не подкаталоги совпадения - PullRequest
0 голосов
/ 15 марта 2012

В скрипте bash я хотел бы проанализировать имена всех подкаталогов и найти все подкаталоги, которые имеют совпадающую строку, но я не хочу, чтобы подкаталоги соответствовали.Я заинтересован в автоматизации создания моих переменных $ PATH и $ PYTHONPATH на основе структуры каталогов.

Вот пример: допустим, я хочу просмотреть папки ~ / dev и ~ / bin и найти все подкаталоги с помощьюbin / содержит программы, которые я хочу запускать в оболочке.Я могу получить список с

$ ls -lR $HOME/bin $HOME/dev |grep "\/"  | grep "bin:"
/Users/dat5h/bin:
/Users/dat5h/bin/project/bin:
...

. Все они могут быть добавлены к $PATH, и все доступные сценарии готовы к запуску.

НО, скажем, я искал каталоги с модулями и пакетами python для добавления в $PYTHONPATH.Я мог бы предположительно искать все каталоги, которые начинаются с /py-.Итак, я пытаюсь:

$ ls -lR $HOME/bin $HOME/dev |grep "\/"  | grep "/py-" 
/Users/dat5h/bin/py-test:
/Users/dat5h/bin/py-test/test-package:
/Users/dat5h/bin/py-test/test-package/nested-test:
...

Я думаю, что я не хотел бы помещать каталоги и подкаталоги пакетов в путь.Я уверен, что это будет странно, но я на самом деле новичок в python, поэтому предложения будут полезны.Как мне построить тестовый пример, чтобы получить каталоги только с py- *, но без последующих подкаталогов?

Я пытался:

$ ls -lR $HOME/bin $HOME/dev |grep "\/"  | egrep "/py-.*[^/]:"

Но это не дает работусделано либо.Может быть, лучше регулярное выражение?Любая помощь будет принята с благодарностью!


РЕШЕНИЕ

Решением, которым я в итоге доволен, была предложенная ниже находка с регулярным выражением кожных покровов:

find $HOME/bin $HOME/dev -type d -regex ".*\/py\(\w\|-\w\)*"

При этом будут найдены все подкаталоги ~ / bin и ~ / dev, которые являются некоторыми вариантами "pySOMETHING", "py-SOMETHING", "pySOME_THING_ELSE" или "py-SOME_THING_ELSE", ноне захватывает никакие подкаталоги тех, если они также не соответствуют этой строке.Это гарантирует, что у меня может быть какое-то простое соглашение об именах для всех моих каталогов с модулями / пакетами python, и я могу импортировать их таким образом, чтобы случайно не иметь возможности импортировать вложенные пакеты без иерархии.

1 Ответ

0 голосов
/ 15 марта 2012

Имеет ли это:

find -type d  -regex ".*py.*bin.*" 

дать вам некоторое начало?

...