https://github.com/gruntjs/grunt-contrib-copy/issues/60

GithubのIssueでも語られていますが,grunt-contrib-copyのパスの指定方法に注意が必要だったのでメモします.

指定フォルダ内のファイルを階層を維持しながら別の場所へコピーしたい場合cp path/* dest/のつもりで以下のように指定すると思った通りのパスへコピーしてくれません.

    copy: {
        dame1: {
            //ダメ
            files: [{src: 'path/**', dest: 'dest/'}]
        },
        dame2: {
            // これもダメ
            files: [{expand: true, src: ['path/**'], dest: 'dest/'}]
        }
    }

上記コードではdest/path/内に階層を維持しながらファイルがコピーされてしまいます.

正しくは,

    copy: {
        ok: {
            files: [{expand: true, cwd: 'path/', src: [**], dest: 'dest/'}]
        }
    }

expandオプションがあると,もし中間のティレクトリが存在しなければ作成してくれます.(mkdirの-pオプション相当)ちなみにこれはcwdオプションでカレントディレクトリを指定した場合のみ有効なオプションのようです.