wcコマンドをファイル数を数えるために使う方法



1 wcコマンド

wcコマンドはファイルや標準入力の文字数や改行数、バイト数を数えたりすることが出来ます。
Linuxのコマンドでは汎用的によく使われるコマンドで、ネットではいろいろな利用方法が紹介されています。

2 lsコマンドと組み合わせてファイル数を数える

wcコマンドでは改行数を数えることが出来るので、これを利用してフォルダ内のファイル数を数えてみることにします。

$ ls -1 | wc -l

とします。読み間違えやすいですが、lsのオプションは"-l"(小文字のエル)ではなく"-1"(数字のイチ)です。"-1"オプションにより1ファイル1行での出力となります。それをパイプでwcに渡して改行数を数えさせれば、結果的にファイル数が分かるという考え方です。
(wcコマンドのオプションは"-l"(小文字のエル)です)

2.1 これだとファイル以外も数えてしまうのでは?

さて上に書いたコマンド、これはフォルダ内にファイルのみが存在する場合での使い方です。フォルダ内にサブフォルダがあると、その数も数えてしまいます。そのため

$ ls -1

で何がカウントされるか把握しておく必要があります。
(後述するfindコマンドとの組み合わせでファイルのみ数えるという方法もあります)

2.2 隠しファイルは?

またlsコマンドはそのままでは隠しファイルは表示されません。

$ ls -A -1

と"-A"オプションを使うと隠しファイルも表示されます。Ubuntuではlaというコマンドが"ls -A"のエイリアスになってるのでそれを使うのもいいでしょう。

3 findコマンドを使う方法

上でlsコマンドではサブフォルダも数えてしまうということを書きました。
findコマンドで"-type f"オプションを指定することで、ファイルのみ表示させることが出来るのでこれを利用します。

$ find ./ -type f | wc -l

3.1 サブフォルダの扱い

さてfindコマンドで上のような指定をすると、サブフォルダ内にあるファイルも数えてしまいます。サブフォルダ自体はカウントに含まれないのですが、サブフォルダに入っているファイルを数えてしまうという問題に対処する必要があります。
findコマンドのマニュアルを読むと"-maxdepth"というオプションがあることが分かります。フォルダ階層でどこまでの深さを検索対象とするかが指定出来ます。ということでこれを利用すると、

$ find ./ -maxdepth 1 -type f | wc -l

と書くことが出来ます。

また全ファイルではなく、特定のファイルだけを数えることも出来ます。簡単な例で示すと

$ find ./ -maxdepth 1 -name "*.png" | wc -l

となります。

4 まとめ

ファイル数を数えると言ってもいろいろな方法があります。サブフォルダ、隠しファイル、シンボリックリンク、ハードリンクなどなど様々な状況もあります。全ての状況に対処するのも大変なので、まずは調べたいモノだけちゃんと調べられるように覚えていくのがいいかと思います。便利なソフトもあるかも知れませんが、基礎的なコマンドの使い方を覚えておけばそこから派生していろいろと応用も効きます。
またオプションの指定を簡略化するために、コマンドのエイリアスを作成するのもいいと思います。

5 参考資料

wcコマンドについて


コメント