2012-03-15 11 views
0

bashスクリプトでは、すべてのサブディレクトリの名前を解析し、一致する文字列を持つサブディレクトリをすべて検索したいが、一致のサブディレクトリは不要。ディレクトリ構造に基づいて$ PATH変数と$ PYTHONPATH変数の自動構築に興味があります。すべてのサブディレクトリを文字列で表示するが、一致するサブディレクトリは表示しない

例: 〜/ devと〜/ binフォルダを調べ、シェルで実行したいプログラムを保持するbin /ですべてのサブディレクトリを探したいとしましょう。私は

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

これらはすべて$PATHに追加して実行する準備ができて、使用可能なすべてのスクリプトを持つことができるとのリストを取得することができます。

しかし、$PYTHONPATHに追加するPythonモジュールとパッケージを含むディレクトリを探していたとしましょう。私はおそらく/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-.*[^/]:" 

をしかし、これは仕事はどちらか行われません。たぶん、より良い正規表現ですか?どんな助けでも大歓迎です!


SOLUTION

私は満足終わったソリューション検索がcutomsの正規表現して以下に示唆された。

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

これは〜/ビンのすべてのサブディレクトリを検索しますし、 〜/ devは "pySOMETHING"、 "py-SOMETHING"、 "pySOME_THING_ELSE"、または "py-SOME_THING_ELSE"の亜種ですが、このストライドにも一致しない限り、それらのサブディレクトリは取得しませんng。これは、私がすべての私のディレクトリにPythonモジュール/パッケージを持つ簡単な命名規則を持つことができるようにし、誤って階層なしでネストされたパッケージをインポートすることなくこの方法でインポートすることを保証します。

答えて

0

は、この処理を行います。

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

はあなたにいくつかのスタートを与えますか?

+0

これは、私のls/grep messと比較してディレクトリを見つけるのに非常に便利です! '$ HOME/bin $ HOME/dev -type d -regex"を見つけました。* \/py \(\ w \ | - \ w \)* "' – scicalculator

関連する問題