現状のファイルサーバには一体何十万のファイルがあるのか?

意外なことに、ファイル容量は何ギガバイトかすぐにわかりますが、ファイル数を即答できる管理者さんは少ないようです。

Windowsではドライブを右クリックすれば容量は瞬時にわかりますが、ファイル数は数えないとわからないからで、しかもエクスプローラでフォルダアイコンを右クリックして、ファイル数やフォルダサイズを表示するのに、多数のファイルのあるフォルダの場合には何分も何十分もかかります。調べたいフォルダが複数ある場合には、バッチ処理で複数フォルダの集計を一気に実行できないため、たいへんに骨が折れます。

鉄飛テクノロジーでは、文書管理・検索システムFileBlogの導入を検討されるお客様が、簡単にファイルの数を数えられるように、フォルダパスの一覧を与えたら、フォルダ階層を一括スキャンして、主なファイル種類別にファイル数・ファイルサイズを数え上げて一覧出力するツール「FbFileScanner」を公開します。

対象ユーザと特徴

どちらかというと玄人向けのツールです

  • 複数のフォルダパスを指定して、その中のファイル数・ファイルサイズを、バッチ処理により主要拡張子別に集計したい、というユーザが対象です
  • 検索エンジンの導入検討、ファイルサーバの移行や、整理整頓、ディスク増設などを計画する、システム管理者およびエンジニアによる利用を想定しています
  • コマンドラインツールなので、素人目には使いづらいかもしれませんが、バッチファイルからの連続呼び出しが簡単です
  • スピード最優先なので、出力は最低限でシンプルですが、最小限のメモリリソースしか使用せず、最速で動作します

最新版ダウンロード

こちらから FbFileScanner.exeをダウンロードしてお使いください

従来版との違い

2008年ごろより鉄飛テクノロジーで公開していたFbFileScannerの旧バージョンは、GUIアプリで、トップフォルダを指定すると、サブフォルダ以下の自動集計を行っておりましたが、今回の新バージョンでは、サブフォルダ以下の集計は行いません。(性能向上に全振りしました)。

従来のバージョンでは集計対象の拡張子をユーザがカスタマイズできず、特にMicrosoft Office文書について、doc/xls/pptのOffice2003以前の拡張子を集計しており、Office2007以降で導入されたdocx/xlsx/pptxを集計できておりませんでした。この点を改良したOffice文書集計を行うとともに、拡張子リストをカスタマイズ可能にして、お客様固有のアプリ拡張子を数え上げることが可能になりました。

FbFileScannerの使い方

FbFileScannerは、コマンドラインプログラムです。Windowsコマンドプロンプトから実行してください。コマンドプロンプトでの主な使用方法を、下記に例示します。
1フォルダのファイル数を数える
複数フォルダ(少数)内のファイルを数える
複数フォルダ(多数)内のファイルを数える
コマンドラインオプション
集計結果の使い方

使用例1(1つのフォルダ内のファイルを数える)

下記のように、フォルダをひとつ指定すると、そのフォルダを対象にファイル数を数えます(フォルダパスは、D:\data\hoge みたいなドライブ文字で始まる形式でも、\\サーバ名\共有名で始まる(UNC)形式でもOKです。)
対象フォルダに読み取り件を持つユーザで実行してください。(権限不足でアクセスできないファイル・フォルダはスキップされるため、正しい集計ができなくなります。)

FbFileScanner \\broccoli\teppi\work

結果1

FbFileScannerを実行すると、画面に下記のように実行結果が出力されます

c:\temp>FbFileScanner \\broccoli\teppi\work
time:2021-10-29T17:47:57.287+09:00	lv:INFO	action:started	logpath:C:\temp\FbFileScanner_result.log	directories:\\broccoli\teppi\work
time:2021-10-29T17:47:57.288+09:00	lv:INFO	action:enum begin	directory:\\broccoli\teppi\work	count:0	directorycount:0	filecount:0	last1yearfilecount:0	docm,doc,docx:0	pptm,pptx,ppt:0	xlsm,xlsx,xls:0	vst,vss,vsd,vdw:0	pdf:0	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:0	dxf,dwg:0	bmp,jpg,tif,tiff,png,jpeg,gif:0	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:0
time:2021-10-29T17:47:57.290+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:0	directorycount:0	filecount:0	last1yearfilecount:0	docm,doc,docx:0	pptm,pptx,ppt:0	xlsm,xlsx,xls:0	vst,vss,vsd,vdw:0	pdf:0	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:0	dxf,dwg:0	bmp,jpg,tif,tiff,png,jpeg,gif:0	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:0
time:2021-10-29T17:47:57.442+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:1000	directorycount:109	filecount:891	last1yearfilecount:19	docm,doc,docx:5	pptm,pptx,ppt:1	xlsm,xlsx,xls:7	vst,vss,vsd,vdw:0	pdf:9	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:54	dxf,dwg:0	bmp,jpg,tif,tiff,png,jpeg,gif:522	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:0
time:2021-10-29T17:47:57.757+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:2000	directorycount:286	filecount:1714	last1yearfilecount:19	docm,doc,docx:5	pptm,pptx,ppt:1	xlsm,xlsx,xls:7	vst,vss,vsd,vdw:0	pdf:9	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:75	dxf,dwg:0	bmp,jpg,tif,tiff,png,jpeg,gif:541	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:0
time:2021-10-29T17:47:58.116+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:3000	directorycount:460	filecount:2540	last1yearfilecount:19	docm,doc,docx:5	pptm,pptx,ppt:1	xlsm,xlsx,xls:7	vst,vss,vsd,vdw:0	pdf:9	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:109	dxf,dwg:0	bmp,jpg,tif,tiff,png,jpeg,gif:548	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:0
time:2021-10-29T17:47:58.403+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:4000	directorycount:623	filecount:3377	last1yearfilecount:19	docm,doc,docx:5	pptm,pptx,ppt:1	xlsm,xlsx,xls:8	vst,vss,vsd,vdw:0	pdf:13	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:182	dxf,dwg:12	bmp,jpg,tif,tiff,png,jpeg,gif:744	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:0
time:2021-10-29T17:47:58.846+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:5000	directorycount:834	filecount:4166	last1yearfilecount:19	docm,doc,docx:23	pptm,pptx,ppt:1	xlsm,xlsx,xls:8	vst,vss,vsd,vdw:0	pdf:57	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:214	dxf,dwg:12	bmp,jpg,tif,tiff,png,jpeg,gif:751	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:0
time:2021-10-29T17:47:59.205+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:6000	directorycount:1012	filecount:4988	last1yearfilecount:19	docm,doc,docx:60	pptm,pptx,ppt:1	xlsm,xlsx,xls:8	vst,vss,vsd,vdw:0	pdf:63	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:247	dxf,dwg:12	bmp,jpg,tif,tiff,png,jpeg,gif:758	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:3
time:2021-10-29T17:47:59.296+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:7000	directorycount:1032	filecount:5968	last1yearfilecount:39	docm,doc,docx:62	pptm,pptx,ppt:1	xlsm,xlsx,xls:8	vst,vss,vsd,vdw:0	pdf:66	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:269	dxf,dwg:12	bmp,jpg,tif,tiff,png,jpeg,gif:1460	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:3
time:2021-10-29T17:47:59.313+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:8000	directorycount:1032	filecount:6968	last1yearfilecount:39	docm,doc,docx:62	pptm,pptx,ppt:1	xlsm,xlsx,xls:8	vst,vss,vsd,vdw:0	pdf:66	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:269	dxf,dwg:12	bmp,jpg,tif,tiff,png,jpeg,gif:2416	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:3
time:2021-10-29T17:47:59.342+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:9000	directorycount:1039	filecount:7961	last1yearfilecount:39	docm,doc,docx:62	pptm,pptx,ppt:1	xlsm,xlsx,xls:8	vst,vss,vsd,vdw:0	pdf:66	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:269	dxf,dwg:12	bmp,jpg,tif,tiff,png,jpeg,gif:3389	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:3
time:2021-10-29T17:47:59.360+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:10000	directorycount:1039	filecount:8961	last1yearfilecount:39	docm,doc,docx:62	pptm,pptx,ppt:1	xlsm,xlsx,xls:8	vst,vss,vsd,vdw:0	pdf:66	jtt,jtd:0	xbd,xdw:0	html,csv,htm,txt:269	dxf,dwg:12	bmp,jpg,tif,tiff,png,jpeg,gif:4219	mp4,avi,flv,m2v,wmv,mpg,mov:0	eps,ai,indd:3
time:2021-10-29T17:48:00.843+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:20000	directorycount:1675	filecount:18325	last1yearfilecount:102	docm,doc,docx:107	pptm,pptx,ppt:38	xlsm,xlsx,xls:63	vst,vss,vsd,vdw:2	pdf:123	jtt,jtd:1	xbd,xdw:4	html,csv,htm,txt:677	dxf,dwg:13	bmp,jpg,tif,tiff,png,jpeg,gif:11018	mp4,avi,flv,m2v,wmv,mpg,mov:43	eps,ai,indd:130
time:2021-10-29T17:48:01.822+09:00	lv:INFO	action:enum checkpoint	directory:\\broccoli\teppi\work	count:30000	directorycount:2140	filecount:27860	last1yearfilecount:125	docm,doc,docx:259	pptm,pptx,ppt:55	xlsm,xlsx,xls:191	vst,vss,vsd,vdw:2	pdf:201	jtt,jtd:1	xbd,xdw:4	html,csv,htm,txt:1632	dxf,dwg:17	bmp,jpg,tif,tiff,png,jpeg,gif:15619	mp4,avi,flv,m2v,wmv,mpg,mov:205	eps,ai,indd:149
time:2021-10-29T17:48:03.589+09:00	lv:INFO	action:enum end	directory:\\broccoli\teppi\work	count:31447	directorycount:2860	filecount:28587	last1yearfilecount:137	docm,doc,docx:275	pptm,pptx,ppt:71	xlsm,xlsx,xls:313	vst,vss,vsd,vdw:2	pdf:238	jtt,jtd:1	xbd,xdw:4	html,csv,htm,txt:1754	dxf,dwg:17	bmp,jpg,tif,tiff,png,jpeg,gif:15622	mp4,avi,flv,m2v,wmv,mpg,mov:205	eps,ai,indd:150
time:2021-10-29T17:48:03.590+09:00	lv:INFO	action:completed
  • 上記のように出力されますが、一行の文字数が多いため、コマンドプロンプトでは右端で折返って複数行になって表示され、たいへん見にくい表示となります。画面出力と同じ内容が、カレントフォルダに FbFileScanner_result.log としてテキスト出力されるので、これをテキストエディタやExcelで開いて確認してください。TABで区切られたテキストファイルなので、テキストエディタからコピーして、Excelにペーストすれば、整形されて読みやすくなります。
  • FbFileScannerの出力を整形するスクリプトについて、本ページの末尾にPowerShellスクリプトを紹介しています。御覧ください
  • ひとつのフォルダに付き、enum begin の行で始まり、enum checkpoint の行が何度か出力された後、 enum end の行が出て終了します。
  • checkpointの行は、最初の1万件まで千件おきに出力され、その後は一万件おきに出力されます

結果1の読み方

“enum end”の行に注目してください。これが、最終的なカウントです。

INFO    2021-10-28T19:11:21.402+09:00 enum end	directory:\\broccoli\teppi\work	count:31447	directorycount:2860	filecount:28587	last1yearfilecount:138	docm,doc,docx:275	pptm,pptx,ppt:71	xlsm,xlsx,xls:313	vst,vss,vsd,vdw:2	pdf:238	jtt,jtd:1	xbd,xdw:4	html,csv,htm,txt:1754	dxf,dwg:17	bmp,jpg,tif,tiff,png,jpeg,gif:15622	mp4,avi,flv,m2v,wmv,mpg,mov:205	eps,ai,indd:150

横に長いので、行と列を入れ替えると下記のようになります。

enum end
directory:\\broccoli\teppi\work
count:31447
directorycount:2860
filecount:28587
last1yearfilecount:138
docm,doc,docx:275
pptm,pptx,ppt:71
xlsm,xlsx,xls:313
vst,vss,vsd,vdw:2
pdf:238
jtt,jtd:1
xbd,xdw:4
html,csv,htm,txt:1754
dxf,dwg:17
bmp,jpg,tif,tiff,png,jpeg,gif:15622
mp4,avi,flv,m2v,wmv,mpg,mov:205
eps,ai,indd:150

コロンで区切ってあるものを表にすると、下記の通りに、ファイル種類別のカウントが得られます

項目名 カウント 説明
count 31447 ファイル数+フォルダ数の総合計
directorycount 2860 フォルダ数合計
filecount 28587 ファイル数合計
last1yearfilecount 138 過去一年以内に更新されたファイル数
docm,doc,docx 275 Word文書
pptm,pptx,ppt 71 PowerPoint文書
xlsm,xlsx,xls 313 Excel文書
vst,vss,vsd,vdw 2 Visio文書
pdf 238 PDF文書
jtt,jtd 1 一太郎文書
xbd,xdw 4 DocuWorks文書
html,csv,htm,txt 1754 HTML文書
dxf,dwg 17 CAD図面
bmp,jpg,tif,tiff,png,jpeg,gif 15622 画像ファイル
mp4,avi,flv,m2v,wmv,mpg,mov 205 動画ファイル
eps,ai,indd 150 DTPファイル

使用例2(複数フォルダ(少数)内のファイルを数える)

下記のように、引数で複数のフォルダを指定することができます

FbFileScanner \\broccoli\teppi\work \\broccoli\teppi\sales D:\share\it

使用例3(複数フォルダ(多数)内のファイルを数える)

対象フォルダが多数ある場合は、フォルダ一覧をテキストファイルから供給できます

    • テキストファイルに、下記のように改行区切りでフォルダパスの一覧を記入し、”dirlist.txt”という名前で(UTF8文字コードで)保存します。
\\broccoli\teppi\work
\\broccoli\sales
c:\temp
    • 下記のようなコマンドラインで(フォルダ一覧ファイルを参照して)実行します
FbFileScanner -directorylist c:\temp\dirlist.txt

コマンドラインオプション

ログ出力ファイル名の指定

下記のように、-logpath オプション引数でログ出力ファイルパスを指定できます。省略時にはカレントフォルダに FbFileScanner_result.txtが作成されます

FbFileScanner.exe c:\shareFbFileScanner.exe c:\share -logpath c:\hoge.txt
フォルダ一覧ファイル名の指定

下記のように、-directorylist オプション引数でファイル名一覧ファイルのパスを指定します

FbFileScanner.exe -directorylist 
集計対象拡張子リストの追加

-type オプション引数で、集計対象の対象拡張子グループを追加できます

カンマ区切りで拡張子を1つ以上指定することで、それら拡張子を持つファイルの数とサイズが集計されるようになり、出力ファイルに対応する列が追加されます。セミコロン区切りで、複数グループを追加できます。

FbFileScanner.exe c:\share -type doc,xls,ppt;docx,xlsx,pptx

集計結果のつかいかた

  • 出力ファイルを見るときは、Excelでタブ区切りテキストファイルとして開くのが見やすいのでおすすめです。
  • “end enum”の列で、フィルタをかけたり、並べ替えたりして、集計結果の行だけを取り出します
  • このファイル形式は、いわゆる”LTSV”形式です。(Labeled Tab Separated Values)
  • LTSVファイルを加工して、タブ区切りテキストに変換するPowerShellスクリプトを下記に公開します。
  • 実行結果例

    複数フォルダについてFbFileScannerを実行した後に、スクリプト実行したあとの出力をExcelに貼り付けると下記のようになります

    スクリプト
    # LTSV2TSV
    # 本スクリプトを 例えばltsv2tsv.ps1として保存して、実行してください。
    # ExecutionPolicyに関するセキュリティエラーが出る場合は、呼び出し元のPowerShellコマンドラインで、下記を先に実行することで実行可能になります
    # Set-ExecutionPolicy RemoteSigned -Scope Process 
    #
    
    $InputFile = "FbFileScanner_result.log"
    
    #
    # ----- STEP 1 ----- ヘッダ行の処理
    #
    
    # 入力ファイルから、"enum end"の行を抽出します
    #Get-Content $InputFile | Select-String "`taction:enum end`t"
    
    # 抽出した行の先頭行を取り出します
    #$line = Get-Content $InputFile | Select-String "`taction:enum end`t" | Select-Object -First 1 
    
    # 抽出した行の先頭行を文字列にして取り出します
    $line = Get-Content $InputFile | Select-String "`taction:enum end`t" | Select-Object -First 1 |Foreach-Object ToString
    
    # 先頭行をタブで分割し、コロンの前だけを取り出します
    $items=$line.split("`t");
    
    for ( $i=0; $i -lt $items.Length; $i++ ){
    	$s= ($items[$i]  -replace ":.*$", "")
    	$items[$i] = $s
    }
    # タブ区切りに戻してヘッダ行を出力
    $items -join "`t"
    
    
    #
    # ----- STEP 2 ----- データ行の処理
    #
    
    # 抽出した行でループしてデータ行を出力します
    #  タブ区切りされた各フィールドの、最初のコロン以降だけを出力します
    Get-Content $InputFile | Select-String "`taction:enum end`t" |
     Foreach { $_ -replace "^[^:]+:",""} |
     Foreach { $_ -replace "`t[^:]+:", "`t" }