0

次のようなファイル構造があります。

a
----1
----2
----3

b
----1
----2
----3

レベル 1 が a,b ディレクトリであるレベル 2 のファイルをカウントする必要があるのですが、それを行う方法はありますか? 特定のレベルのファイルを取得しますか?

私は素朴なシェル プログラマーです。wc-l ですが、この場合は 2 が返されます

4

4 に答える 4

2

さらに別の方法...

L2FilesDirs=`ls -d */* | wc -l`
L2Dirs=`ls -d */*/ | wc -l`

L2OnlyFiles=$(( $L2FilesDirs - $L2Dirs ))
于 2012-12-19T15:58:41.983 に答える
1

一部の find(1) 実行可能ファイルは mindepth および maxdepth オプションをサポートしています (これらは残念ながら POSIX ではありませんが、Linux や Cygwin のような GNU ツールを使用している場合):

find . -mindepth 2 -maxdepth 2

これは、すべてのサブディレクトリ内のすべてのファイル システム オブジェクトを一覧表示します (ただし、. および .. エントリは除きます。これは、おそらくとにかく必要なものです)。

于 2012-12-19T15:30:20.323 に答える
1

いくつかのオプションがあります。

  1. すべてのファイルを再帰的にカウントします。

    find . -type f | wc -l
    
  2. a以下のファイルbのみをカウントします。

    find a b -type f | wc -l
    
  3. 深さ 2 ですべてのオブジェクトをカウントします。

    find . -mindepth 2 -maxdepth 2 | wc -l
    find a b -mindepth 1 -maxdepth 1 | wc -l
    
于 2012-12-19T15:29:54.337 に答える
1

bash または同様のシェルを想定して、グロビングと配列を使用します

$ ls -R
.:
a  b

./a:
1  2  3

./b:
4  5  6
$ level2=(*/*)
$ echo "num files at level 2: ${#level2[@]}"
num files at level 2: 6
于 2012-12-19T19:36:09.467 に答える