1

したがって、ディレクトリ内のファイルの数をカウントする方法を知っていfor filename in *ます-ループを使用してから、目的に合うようにファイル名をテストしますが、ディレクトリをループしてからカウントする方法を理解するのに苦労しています多くの(サブ)ディレクトリがその中にあります。

誰かが私を正しい方向に向けることができますか?

4

4 に答える 4

2

を使用して、ディレクトリかどうかをテストできます-d

検索を使用できます:find . -mindepth 1 -maxdepth 1 -type d

于 2012-08-10T20:34:10.077 に答える
1
((n=0))
for fn in *
do
   [[ -d "${fn}" ]] && ((n=1+${n}))
done

カウンターを保持し、ディレクトリに対してのみインクリメントします...

于 2012-08-10T20:50:24.603 に答える
1

あなたは何をしようとしているのですか?コマンドを見てくださいwc。具体的wc -lには、出力の行数をカウントします。出力を生成する一連のコマンド全体を使用して、それを にパイプできますwc -l。ファイルにヘッダーとフッターを追加するコマンド ( など) には注意してくださいls -l

ここではいくつかの例を示します。

これは、で始まらないすべてのファイルとディレクトリをカウントします.:

$ ls | wc -l

これは、質問で使用した for ループと同じです。

これにより、隠しファイルを含むすべてのファイルとディレクトリがカウントされます。ls -Aの代わりに に注意してくださいls -a。最初のものはファイルとしてリストされませんが、2番目のものは次のようになり.ます:..

$ ls -A | wc -l

これにより、ディレクトリツリー全体のすべてのファイルとディレクトリがカウントされます

$ find . | wc -l

これは、ディレクトリ ツリー全体のディレクトリのみをカウントします。

$ find . -type d| wc -l

これにより、ディレクトリツリー全体のすべてのファイルがカウントされます

$ find . -type f | wc -l

ls - これにより、現在のディレクトリ内のディレクトリ数が制限されます

$ find . -mindepth 1 -maxdepth 1 -type d | wc -l

そして、これを使用して変数に割り当てることができます:

$ num_of_files=$(find . -type f | wc -l)
于 2012-08-10T21:03:06.513 に答える
0

ディレクトリを数えたり、ディレクトリ名を処理したりする方法は次のとおりです。

#!/bin/bash

old_IFS=$IFS
IFS=$'\n' 
array=($(ls -F /foo/bar/ | grep '/$')) # this creates an array named "array" that holds
IFS=$old_IFS                           # all the directory names located in /foo/bar/

echo ${#array[@]} # this will give you the number of directories in /foo/bar/

for ((i=0; i<${#array[@]}; i++))
do
echo ${array[$i]} # this will output a list of all the directories
done

または、次のこともできます。

ls -F /foo/bar/ | grep '/$' | cat > directorynames.txt

そして行数を数えます。または、猫を取り除き、改行文字ごとにカウントアップする for ループに上記を配置することもできます。

于 2012-08-10T21:11:24.913 に答える