[Linux]ディレクトリとサブディレクトリのファイル数をカウントする

2021年6月16日水曜日

Linux

Linuxのディレクトリ内のファイル数をカウントするコマンドや、
サブディレクトリ内のファイル数も含めて再帰的にカウントするコマンドを紹介します


結論

カレントディレクトリのファイル数を出力する場合は下記コマンドを実行します
$ ls -UF | grep -v / | wc -l

カレントディレクトリのサブディレクトリ内のファイル数も含めて出力する場合は
下記コマンドを実行します
$ ls -UFR | grep -v "/\|.:\|^\s*$" | wc -l

具体例

下記の通りのディレクトリで実際にファイル数を取得していきます
tempディレクトリにはtxtファイルが5つ、ディレクトリを1つ配置しており
temp_2ディレクトリにはtxtファイルを3つ配置しています
$ tree ./temp
./temp
├── memo_1.txt
├── memo_2.txt
├── memo_3.txt
├── memo_4.txt
├── memo_5.txt
└── temp_2
    ├── memo_6.txt
    ├── memo_7.txt
    └── memo_8.txt

tempディレクトリ直下でファイル数を取得します
$ cd temp
$ ls -UF | grep -v / | wc -l
5

temp直下のファイル数を取得できました
この時サブディレクトリのファイル数は含まれていません

次にサブディレクトリ内のファイル数を含めたファイル数を取得します
$ cd temp
$ ls -UFR | grep -v "/\|.:\|^\s*$" | wc -l
8
サブディレクトリのファイル数も含めて取得できました

解説

各コマンドの詳細を解説していきます

lsコマンド

ファイルやディレクトリの情報を表示するコマンドです

以下に今回使用しているオプションを記載します

-U オプション

このオプションはファイルを並び替えることなく、ディレクトリに含まれている要素順で表示します
ディレクトリ内のファイル数が膨大な場合に高速化に繋がります

-R オプション

対象のディレクトリのサブディレクトリの情報も再帰的に表示します
$ ls
memo_1.txt  memo_2.txt  memo_3.txt  memo_4.txt  memo_5.txt  temp_2

# サブディレクトリの情報も取得
$ ls -R
.:
memo_1.txt  memo_2.txt  memo_3.txt  memo_4.txt  memo_5.txt  temp_2

./temp_2:
memo_6.txt  memo_7.txt  memo_8.txt
上記例のようにサブディレクトリ内の情報が表示されます

-F オプション

情報を付加するコマンドです
ディレクトリ名の後に / を、バイナリファイルに * を付加します
$ ls
memo_1.txt  memo_2.txt  memo_3.txt  memo_4.txt  memo_5.txt  temp_2

$ ls -F
memo_1.txt  memo_2.txt  memo_3.txt  memo_4.txt  memo_5.txt  temp_2/
上記のようにディレクトリの後に/が付加されます

grepコマンド

対象となるファイルや出力から文字列を検索するコマンドです

以下に今回使用しているオプションを記載します

-v オプション

対象となるファイルや出力から一致しない文字列を検索します
本記事のコマンドではlsコマンドの出力に対してgrepを使用しています
$ ls -UF
memo_1.txt  memo_2.txt  memo_3.txt  memo_4.txt  memo_5.txt  temp_2/

# "/"を含む文字列を除いた結果を出力
$ ls -UF | grep -v /
memo_1.txt
memo_2.txt
memo_3.txt
memo_4.txt
memo_5.txt
このgrepコマンドは正規表現を使用できます

本記事のサブディレクトリまで含めてファイル数を取得する際の正規表現は下記を意味しています

| はOR検索を意味しています
エスケープを含めて \| と表現します
^\s*$ は行頭から行末まで全て空白であることを意味しています
^ が行頭を
\s が空白文字を
* が0回以上の繰り返しを
$ が行末を意味しています

wcコマンド

ファイルや出力の行数や単語数等を数える(word count)するコマンドです

以下に今回使用しているオプションを記載します

-l オプション

対象となるファイルや出力から改行の数をカウントします
本記事のコマンドではgrepコマンドの出力に対してwcコマンドを使用しています
$ ls -UFR | grep -v "/\|.:\|^\s*$"
memo_1.txt
memo_2.txt
memo_3.txt
memo_4.txt
memo_5.txt
memo_6.txt
memo_7.txt
memo_8.txt

# 上記出力の改行の数をカウント
$ ls -UFR | grep -v "/\|.:\|^\s*$" | wc -l
8

grepに正規表現が含まれるため若干コマンドが複雑になりますが
その代わりにディレクトリ数を含めず正確にファイル数を取得できるメリットがあります

AIエンジニア向けフリーランスならここがおすすめです

まずは無料会員登録

プロフィール

自分の写真
製造業に勤務する傍ら、日々AIの技術動向を調査しブログにアウトプットしています。 AIに関するご相談やお仕事のご依頼はブログのお問い合わせフォームか以下のアドレスまでお気軽にお問い合わせください。 bhupb13511@yahoo.co.jp

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology