0

我正在尝试复制目录列表中的所有文件并将它们粘贴到输出目录中。问题是每当我使用 * 时,输出都会显示不存在该名称的文件或目录。这是具体的错误输出:

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

如果我只是输入特定文件的名称而不是 *,它就可以工作。

这是我的蛋糕文件:

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()
4

1 回答 1

2

您正在使用该*角色,可能是因为它在您的 shell 中对您有用。使用*和其他扩展以匹配多个路径的通配符称为“通配符,虽然您的 shell 会自动执行此操作,但大多数其他程序(包括 node/javascript/coffeescript)默认情况下不会执行此操作。正如您所发现的那样,cp二进制文件本身也不会进行 globbing。shell 执行 globbing,然后将匹配文件/目录的列表作为参数传递给cp. 查看节点模块node-glob以进行 globbing 并返回匹配文件/目录的列表,然后您可以将其传递给cp如果你愿意,可以作为论据。请注意,您还可以使用内置此类功能的文件系统模块。但是请注意,将异步代码直接放入 Cakefile 可能会出现问题,如此所述。

于 2012-03-21T15:38:36.773 回答