このエントリーをはてなブックマークに追加


ファイル数を取得する方法

ディレクトリに存在するファイル数や特定の拡張子を持つファイル数、カレントディレクトリ以下のディレクトリ内に存在するファイル数や特定拡張子を持つファイル数の取得方法を以下に記します。


lsとwcコマンドを利用する

wcコマンドに-lオプションを使用すると行数を取得することができます。
つまり、検索した結果の行数を取得すればファイル数を取得することができます。

lsコマンドとwcコマンドを利用してファイル数を取得

以下にlsコマンドとwcコマンドを利用した例を記します。 lsコマンドに-1オプションを利用し1ファイル1行として表示するようにします。

$ ls -1
a.csv
a.txt
b.csv
b.txt
c.csv
c.txt

ls -1が出力した行数を取得すればファイル数になりますね。
ls -1とwc -lをパイプでつなげて動作させた結果です。

$ ls -1 | wc -l
6

ディレクトリが存在していてディレクトリをカウントから除きたい場合は以下のようにすれば良いと思います。
以下にls, wc, grepコマンドを利用し動作させた結果を記します。

  • ディレクトリfoo, barが存在してます。(-Fオプションにてディレクトリの場合、最後に/をつけるようにしました。)
    $ ls -1F
    a.csv
    a.txt
    b.csv
    b.txt
    bar/
    c.csv
    c.txt
    foo/
  • grep -vコマンドにより / を含む行を対象外にしました。
    $ ls -1F | grep -v /
    a.csv
    a.txt
    b.csv
    b.txt
    c.csv
    c.txt
  • ls, grep, wcを組み合わせ取得したファイル数です。(ディレクトリがカウントから除かれています)
    $ ls -1F | grep -v / | wc -l
    6

findとwcコマンドを利用する

findを利用すれば、カレントディレクトリ以下のファイルも対象にしたりなどすることができます。

findとwcコマンドを利用してファイル数を取得する

lsコマンドと同様にfindで対象となったファイルの行数をwcコマンドで取得します。
テストしたファイルおよびディレクトリは以下の通りです。

$ find ./
./
./a.txt
./a.csv
./foo
./foo/aa.csv
./foo/aa.txt
./bar
./bar/aa.csv
./bar/aa.txt
  • csvファイルのファイル数を取得する 上記のfind ./の出力を見ると、カレントディレクトリにa.csv, fooディレクトリにaa.csv, barディレクトリにaa.csv、計3つcsvファイルが存在していることがわかります。
    findコマンドを利用してcsvファイル数を取得してみます。
    $ find ./ -name "*.csv" | wc -l
    3
     
    注意: -name の後ろの引数に*.csvなどとする場合は、ダブルクオート(")またはシングルクオート(''''')で囲んでください。
    または、ダブルクオート、シングルクオートを利用したくない場合は、*の前にバックスラッシュ(\)を入れてください。
    そうしないと、上記の環境の場合、カレントディレクトリにあるa.csvが展開されa.csvしか対象になりませんので、ご注意を。

関連資料



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:27:36