読者です 読者をやめる 読者になる 読者になる

SourceChord

C#とXAML好きなプログラマの備忘録。最近はWPF系の話題が中心です。

fs-extraを使ったファイル/フォルダ操作

Node.js

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!")
});

コピー時に、正規表現や、関数を指定してフィルタリングすることができるようです。
が、試してみたところ、正規表現でのフィルタリングは上手く動きませんでした。。。
使い方が悪いのか、バグなのか。
ちょっとお悩み中・・・