したがって、ディレクトリ内のファイルの数をカウントする方法を知っていfor filename in *
ます-ループを使用してから、目的に合うようにファイル名をテストしますが、ディレクトリをループしてからカウントする方法を理解するのに苦労しています多くの(サブ)ディレクトリがその中にあります。
誰かが私を正しい方向に向けることができますか?
を使用して、ディレクトリかどうかをテストできます-d
。
検索を使用できます:find . -mindepth 1 -maxdepth 1 -type d
((n=0))
for fn in *
do
[[ -d "${fn}" ]] && ((n=1+${n}))
done
カウンターを保持し、ディレクトリに対してのみインクリメントします...
あなたは何をしようとしているのですか?コマンドを見てください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)
ディレクトリを数えたり、ディレクトリ名を処理したりする方法は次のとおりです。
#!/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 ループに上記を配置することもできます。