1

少し探し回っていて、これに対する解決策を見つけることができません。名前でleaf-directoryを探していると思います。この例では、moduleというサブディレクトリを持たない「modules」というディレクトリのリストを取得したいと思います。

modules/package1/modules/spackage1
modules/package1/modules/spackage2
modules/package1/modules/spackage3/modules
modules/package1/modules/spackage3/modules/spackage1
modules/package2/modules/

私が望むリストには

modules/package1/modules/spackage3/modules/
modules/package2/modules/

moduleというサブディレクトリを持たないmoduleという名前のすべてのディレクトリ

私は運がないのにこれを試すことから始めました

find . -name modules \! -exec sh -c 'find -name modules' \;

-execは終了コードで機能します。カウントを終了コードとして渡します。

find . -name modules -exec sh -c 'exit $(find {} -name modules|grep -n ""|tail -n1|cut -d: -f1)' \;

これは、modulesと呼ばれる各サブディレクトリの数を取得し、それを終了する必要があります。そのような愛はありません。

4

3 に答える 3

1

これは GNU を前提としていますfind。「modules」が 1 つだけ含まれているリーフ ディレクトリをすべて検索します。

find -regex '.*/modules\(/.*\|$\)' \! -regex '.*/modules/.*/modules\(/.*\|$\)' -type d -links 2
于 2012-06-12T10:38:28.067 に答える
0

あなたのスタート

find . -name modules \! -exec sh -c 'find -name modules' \;

悪くはありませんでしたが、いくつかの改善が必要です。

find . -name modules \! -exec sh -c 'find {} -mindepth 1 -name modules|read' \; -print
  • {}トップディレクトリではなく、見つかったモジュールディレクトリを検索する
  • -mindepth 1見つかったモジュールディレクトリの下のみを検索し、それ自体を再度検索しない
  • |readファイルが見つからない場合に終了ステータスを設定します (残念ながら、find はそれを行いません)。
  • -print見つかったディレクトリを印刷する
于 2014-03-28T10:00:04.947 に答える
0
find . -name modules |\
awk '{gooddir[$1]=1}\
 END {\
    for(i in gooddir){\
        for(j in gooddir){\
            if(i!=j&&substr(i,0,length(j))==i)\
            {gooddir[i]=0;break}\
        }\
    }\
    for(i in gooddir){if(gooddir[i]==1){print i}}}'

これを試して?

于 2012-06-12T08:32:29.347 に答える