サブディレクトリなしで「デフォルトのサブディレクトリ」の数を知ることができる人はいますか?

サブディレクトリなしで「デフォルトのサブディレクトリ」の数を知ることができる人はいますか?

私が望むのは、ツリーの1つのレベルでディレクトリ数を取得することです。これまで私はこれを持っています。

find /media/data/temp1  -type d -exec basename {} \;

これは私に次のことを与えます:

temp1
Coldplay
Greatest Hits
Sex Pistols
never mind the bollocks here's the sex pistols
the great rock and roll swindle
The Boomtown Rats
CD1
CD2
CD3
CD4
Doris Day
Greatest Hits

temp1の下にある「デフォルト」ディレクトリの実際のサブディレクトリである追加のディレクトリをすべて削除し、数を取得する必要があるディレクトリを含むディレクトリを削除するには、次の手順を実行します。

find /media/data/temp1 -mindepth 1 -maxdepth 1    -type d -exec basename {} \; 

これは私に次のことを与えます:

Coldplay
Sex Pistols
The Boomtown Rats
Doris Day

同じレベルのすべてのディレクトリ数を計算するには、実際のディレクトリレベルを取得する必要があります。だから私はそれを次のカウンタを追跡するために使用できます。

let TotalDir--
echo "Dir left to do is "$TotalDir""

それで、私は必要なものを得るためにこのような構文に入力できる単純な関数が必要であることを知りました。

TotalDir=$( echo find /media/data/temp1 -mindepth 1 -maxdepth 1 -type d -exec basename {} \;| "the function name needed here" )

どの関数呼び出しを使うべきかわかりません。 Linuxではこれをアプレットと呼びますが、ほとんどの人はその存在についてほとんど知りませんが、他の人はそれを使用する方法について多くの知識を持っています。

ベストアンサー1

探している機能はwc(単語数)であり、-lオプションを使用して行数を計算できます(つまり、数字1ではなく文字l)。

ただし、これを行うためにfindは必要ありません。目的のタスクを実行する簡単な方法は次のとおりです。

TotalDir=$( ls -1d */ | wc -l )

その後に数字1が続き、lsその後に文字lが続きますwc

編集:以下のコメントの議論を要約するためのソリューションのしくみの詳細な説明は次のとおりです。

  • -1ls1つの列のみを使用するように指示するので、実際には各サブディレクトリに対して1つの行を取得します。
  • -dlsリストにディレクトリだけを表示し、内容を表示しません(違いを確認するには、-dを使用するか、使用せずにls * /を試してください。
  • */ls現在のディレクトリの下のすべてのディレクトリを一覧表示するように指示します。以下のすべてのディレクトリを一覧表示するように/path/to/ParentDirectory/*/伝えます。ls/path/to/ParentDirectory/
  • 最後に、wc -lコマンドによって出力された行数を数えますls。これは、上記のパラメータを使用して正確にサブディレクトリの数です。

おすすめ記事