Node.jsには、ファイル操作関係を行うfsモジュールというのが標準で用意されてます。
ですが、こいつは微妙にかゆいとこに手が届かないです。。
そんなファイル/フォルダ操作をちょろっと便利にしてくれる、fs-extraというライブラリがあるので使ってみました。
使い方
以下のコマンドでインストール。
npm install fs-extra --save
このfs-extraモジュールは、node.js標準のfsモジュールと同等のメソッドも提供してます。
なので、今までvar fs = require('fs');
としてた部分を、var fs = require('fs-extra');
と差し替えても使えるように作られてるみたい。
よく使いそうなパターンを少しメモしておきます。
深い階層のフォルダを一気に作成
var fs = require('fs-extra'); fs.mkdirs('H:\\Test\\Test\\Test\\Test\\Sample', function (err) {if (err) return console.error(err) console.log("success!") });
深い階層のフォルダも一気に作れます。
標準のfsモジュールでは、複数階層のフォルダを一度に作れないため、再帰的にフォルダ作成をするメソッドを自分で用意したりしないといけませんでした。
自分で作るよりは、こういうのに任せた方が間違いがなくていいですね。
フォルダを再帰的にコピー
var fs = require('fs-extra'); fs.copy('H:\\Test\\Test\\copy_test\\src', 'H:\\Test\\Test\\copy_test\\dst', function (err) {if (err) return console.error(err) console.log("success!") });
これで、普通にフォルダを再帰的にコピーできます。
入れ子になったフォルダツリーも一気にコピーできて便利!!
コピー時のフィルタリング
var fs = require('fs-extra'); //var filter = /.txt$/i;var filter = function (s) {return s.split('.').pop() !== 'txt'} fs.copy(コピー元のパス, コピー先のパス, filter,function (err) {if (err) return console.error(err) console.log("success!") });
コピー時に、正規表現や、関数を指定してフィルタリングすることができるようです。
が、試してみたところ、正規表現でのフィルタリングは上手く動きませんでした。。。
使い方が悪いのか、バグなのか。
ちょっとお悩み中・・・