Linuxでディレクトリ内のファイル数をカウントする方法|ls・find・wcと再帰・隠しファイル対応

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips, ディレクトリ・ファイル操作 > Linuxでディレクトリ内のファイル数をカウントする方法|ls・find・wcと再帰・隠しファイル対応
「このディレクトリにファイルが何個あるか、すぐに知りたい」
「ログファイルが溜まりすぎていないか、数で確認したい」
「サブディレクトリも含めて、ファイル数の全体像を把握したい」

サーバー運用では、ディレクトリ内のファイル数を確認する場面が頻繁にあります。ログのローテーション確認、バックアップの検証、ディスク容量調査の前段階など、用途はさまざまです。

この記事では、Linuxでディレクトリ内のファイル数をカウントする方法を、目的別に解説します。基本の ls | wc -l から、find を使った再帰的カウント、特定の拡張子だけを数える方法、さらにディレクトリごとの内訳表示まで網羅します。
【この記事でわかること】
・ls + wc -lでディレクトリ内のファイル数をカウントする方法
・findコマンドでサブディレクトリも含めて再帰的にカウントする方法
・特定の拡張子のファイルだけを数える方法
・ディレクトリごとにファイル数を内訳表示する方法

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

ファイル数カウントの基本(ls + wc)

最もシンプルな方法は、ls の出力行数を wc -l で数えることです。

1. カレントディレクトリのファイル数を数える

# カレントディレクトリのファイル・ディレクトリ数を表示 ls | wc -l

ls はファイル名を1行ずつ出力し、wc -l がその行数を数えます。ただし、この方法には注意点があります。

隠しファイルは含まれない:ls は「.」で始まるファイルを表示しない
ディレクトリも1件としてカウントされる:ファイルだけを数えたい場合は不正確
サブディレクトリ内は含まれない:直下の1階層だけが対象

2. 隠しファイルも含めてカウントする

-A オプションを付けると、.(カレント)と ..(親ディレクトリ)を除いた隠しファイルも表示されます。

# 隠しファイルも含めてカウント(. と .. は除外) ls -A | wc -l

.bashrc.bash_profile などの隠しファイルもカウントしたい場合は、必ず -A を付けてください。

ファイルだけ・ディレクトリだけを数える(find + wc)

ls ではファイルとディレクトリが混在してカウントされます。種類を区別して数えるには find コマンドを使います。

1. ファイル数だけをカウントする

# 指定ディレクトリ配下のファイル数を再帰的にカウント find /var/log -type f | wc -l

-type f でファイルのみを検索対象にします。サブディレクトリ内のファイルも含めて再帰的にカウントされます。

2. ディレクトリ数だけをカウントする

# 指定ディレクトリ配下のディレクトリ数をカウント find /var/log -type d | wc -l

-type d でディレクトリのみを検索します。起点ディレクトリ自身も1件に含まれる点に注意してください。起点を除きたい場合は -mindepth 1 を追加します。

# 起点ディレクトリ自身を除外してカウント find /var/log -mindepth 1 -type d | wc -l

3. 直下の1階層だけをカウントする(サブディレクトリを除外)

find はデフォルトでサブディレクトリも再帰的に検索します。直下だけに限定したい場合は -maxdepth 1 を指定します。

# 直下のファイル数だけをカウント(サブディレクトリ内は含めない) find /var/log -maxdepth 1 -type f | wc -l

特定の条件でファイル数をカウントする

実務では「ログファイルだけ」「今日更新されたファイルだけ」など、条件を絞ってカウントしたい場面が多くあります。

1. 特定の拡張子のファイル数を数える

# .log ファイルの数をカウント find /var/log -type f -name "*.log" | wc -l # .conf ファイルの数をカウント find /etc -type f -name "*.conf" | wc -l

2. 特定のサイズ以上のファイル数を数える

# 100MB以上のファイル数をカウント find / -type f -size +100M | wc -l

ディスク容量が逼迫しているときに、巨大ファイルが何個あるかをすぐに確認できます。

3. 最近更新されたファイル数を数える

# 過去24時間以内に更新されたファイル数 find /var/log -type f -mtime 0 | wc -l # 過去7日以内に更新されたファイル数 find /var/log -type f -mtime -7 | wc -l

-mtime 0 は「今日(24時間以内)」、-mtime -7 は「7日以内」を意味します。

4. 空ファイルの数を数える

# 空ファイル(0バイト)の数をカウント find /home -type f -empty | wc -l

不要な空ファイルが大量に残っていないかの確認に使えます。

ディレクトリごとのファイル数を表示する

「どのディレクトリにファイルが集中しているか」を把握したい場合の方法です。

1. 各サブディレクトリのファイル数を一覧表示する

# /var/log 配下の各ディレクトリのファイル数を表示 for dir in /var/log/*/; do echo "$(find "$dir" -type f | wc -l) $dir" done | sort -rn

出力例:

152 /var/log/audit/ 48 /var/log/httpd/ 23 /var/log/sa/ 12 /var/log/tuned/

sort -rn でファイル数が多い順に並び替えます。ログの溜まり具合を一目で確認できます。

2. ツリー形式でファイル数を表示する(treeコマンド)

tree コマンドがインストールされていれば、ディレクトリ構造とファイル数を同時に確認できます。

# ディレクトリの階層構造とファイル数を表示 tree /var/log --du -h # treeがない場合はインストール yum install tree # または dnf install tree

tree の最終行にディレクトリ数とファイル数の合計が表示されます。

実務で使えるファイル数カウントのTips

ファイル名にスペースや改行が含まれる場合

find | wc -l はファイル名に改行文字が含まれていると正確にカウントできません。厳密にカウントしたい場合は、-printf を使います。

# ファイル名に改行が含まれていても正確にカウント find /home -type f -printf '.' | wc -c

-printf '.' はファイル1件につきドットを1つ出力し、wc -c でその文字数(=ファイル数)を数えます。ファイル名の中身に左右されないため確実です。

通常のサーバー運用でファイル名に改行を含むケースはまずありませんが、不特定のユーザーがファイルをアップロードする環境では覚えておくと安心です。

Permission denied が大量に出る場合

権限のないディレクトリを検索すると「Permission denied」が大量に表示されます。エラーを非表示にしてカウントだけ取得するには、標準エラー出力を捨てます。

# エラーメッセージを非表示にしてカウント find / -type f -name "*.log" 2>/dev/null | wc -l

2>/dev/null で標準エラー出力を破棄します。ただし、エラーが出たディレクトリのファイルはカウントされない点は理解しておいてください。正確にカウントしたい場合は sudo を付けて実行します。

大量のファイルがあるディレクトリでの注意

数十万ファイルを超えるディレクトリでは、ls の実行自体に時間がかかります。ls はファイル名をソートしてから出力するためです。ソート不要でカウントだけしたい場合は find を使ってください。find はソートせずに順次出力するため、大量ファイルでも効率的です。

本記事のまとめ

やりたいこと コマンド
直下のファイル・ディレクトリ数を数える ls | wc -l
隠しファイルも含めて数える ls -A | wc -l
ファイルだけを再帰的に数える find パス -type f | wc -l
ディレクトリだけを数える find パス -type d | wc -l
直下のファイルだけを数える find パス -maxdepth 1 -type f | wc -l
特定の拡張子のファイルを数える find パス -type f -name "*.log" | wc -l
100MB以上のファイルを数える find パス -type f -size +100M | wc -l
過去24時間以内に更新されたファイルを数える find パス -type f -mtime 0 | wc -l
空ファイルを数える find パス -type f -empty | wc -l
エラーを非表示にしてカウント find パス -type f 2>/dev/null | wc -l

Linuxのファイル操作コマンドを体系的に学びませんか?

ls・find・wcの組み合わせは、サーバー運用で頻繁に使う基本パターンです。この仕組みを理解しておくと、応用の幅が大きく広がります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。