2012-03-21 12 views
0

ディレクトリのリストにあるすべてのファイルをコピーして出力ディレクトリに貼り付けようとしています。問題は、*を使用するたびに出力され、その名前でファイルまたはディレクトリが存在しないことが示されます。Cakefileのコピータスク

cp: cannot stat `tagbox/images/*': No such file or directory 
cp: cannot stat `votebox/images/*': No such file or directory 

私はだけではなく、*の特定のファイルの名前を入れた場合は、それが動作:ここでは、特定のエラーが出力されます。ここ

は私Cakefileです:

fs = require 'fs' 

util = require 'util' 
{spawn} = require 'child_process' 

outputImageFolder = 'static' 
imageSrcFolders = [ 
'tagbox/images/*' 
'votebox/images/*' 
] 

task 'cpimgs', 'Copy all images from the respective images folders in tagbox, votebox, and omnipost into static folder', -> 
    for imgSrcFolder in imageSrcFolders 
    cp = spawn 'cp', [imgSrcFolder, outputImageFolder] 
    cp.stderr.on 'data', (data) -> 
     process.stderr.write data.toString() 
    cp.stdout.on 'data', (data) -> 
     util.log data.toString() 

答えて

2

あなたはおそらく、*文字を使用していることは、あなたのシェルであなたのために働くため。 *と複数のパスに一致するように拡張する他のワイルドカード文字を使用すると、 "globbing"と呼ばれ、シェルが自動的に実行する間、node/javascript/coffeescriptを含む他のほとんどのプログラムはデフォルトでそれを行いません。また、cpバイナリ自体は、あなたが発見しているようにグロビングを行いません。シェルはglobbingを行い、一致するファイル/ディレクトリのリストを引数としてcpに渡します。グロブを行うには、ノードモジュールnode-globを調べて、一致するファイル/ディレクトリのリストを返します。これを好きな場合は、引数としてcpに渡すことができます。このタイプの機能を組み込んだファイルシステムモジュールを使うこともできることに注意してください。ただし、非同期コードを直接Cakefileに入れることは、documented hereのように問題があります。

+0

Peterさん、ファイルシステムモジュールを調べました。これは次のようになりました。http://blog.monitis.com/index.php/2011/07/09/6-node-js-recipes-working-with-ファイルシステム/ナンバー4は私がやっていたことに本当に役立ち、仕事を終えました。 – prashn64

関連する問題