背負い投げとENTER_FRAME

Icon

なんちゃってWebクリエイターがFlashやらActionScriptやらを淡々と書く。ときとき柔道の話しもする。

Gruntでフォルダを統合するスクリプト

こういう差分だけのフォルダとファイルを

20140101_ROOT
├ title
  ├ title_01.png
  └ title_02.png
├ banner
  ├ banner_01.png
  ├ banner_02.png
  └ banner_03.png
└ item
  └ item_01.png

20140102_ROOT
├ title
  ├ title_03.png
  └ title_04.png
├ banner
  ├ banner_04.png
  ├ banner_05.png
└ item
  ├ item_02.png
  └ item_03.png



同じ階層にして統合したい

integration_ROOT
├ title
  ├ title_01.png
  ├ title_02.png
  ├ title_03.png
  └ title_04.png
├ banner
  ├ banner_01.png
  ├ banner_02.png
  ├ banner_03.png
  ├ banner_04.png
  ├ banner_05.png
└ item
  ├ item_01.png
  ├ item_02.png
  └ item_03.png



統合作業をするために、こんな感じでプロジェクトフォルダに入れる。

project
├ Gruntfile.js
├ updateFolder
  ├ 20140101_ROOT
    ├ ...
    ├ ...
    └ ...
  └ 20140102_ROOT
    ├ ...
    ├ ...
    └ ...



Gruntfile.jsで統合スクリプトを書く。

'use strict';

module.exports = function (grunt) {
	grunt.initConfig({
		...
	});

	grunt.task.registerTask('integrate', 'Log stuff.', function() {

		grunt.file.recurse('updateFolder/', fileCopy);

		function fileCopy(abspath, rootdir, subdir, filename){
			
			// いらないOSの隠しファイルは処理しない
			if( abspath.indexOf('Thumbs.db')<=0 && abspath.indexOf('.DS_Store')<=0){

				var moto = abspath;

				var dirarr = moto.split('/');

				dirarr.shift();
				dirarr.shift();

				// 新しい階層パス
				var newPath = 'integration_ROOT/';

				for (var i = 0; i < dirarr.length; i++) {
					newPath += dirarr[i];
					if( i != dirarr.length-1 ){
						newPath += '/';
					}
				};

				// ファイルの処理を監視するためにログを吐かせる
				grunt.log.writeln('元ファイル: '+moto);
				grunt.log.writeln('新ファイル: '+newPath);

				// フォルダに入ってるもののみ処理をかける
				// そうしないとエラーが出る
				if(dirarr.length>=1){
					grunt.file.copy(abspath, newPath);
				}
			}
		}
	});

};



Terminalで実行して、問題がなければ、
新しく生成した「integration_ROOT」の中に統合したフォルダとファイルが入ってるはず。

grunt integrate


今回の主役

grunt.file.recurse('updateFolder/', fileCopy);

指定フォルダ(第一引数)以下のものをすべて再帰的に処理を回してくれる関数。
ありがたい、ありがたい。

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

Category: Grunt

Tagged:

Leave a Reply

中の人のプロフィール

柔道歴約20年だが諸理由で未だ初段。162cm、60kgくらいの軽量級。得意は背負い投げと巴投げ。2009年、左ヒザ前十字靭帯損傷。ただ今柔道復帰を企んでいる真っ最中。仕事では最近、ActionScriptを書いたり、WordPressをいじったりの日々が続いてる。@renowanにてつぶやいてる。

アーカイブ

Flicker

This movie requires Flash Player 9.0.0