我正在尝试复制目录列表中的所有文件并将其粘贴到输出目录中。问题是每当我使用*时,输出表明该名称没有文件或目录存在。以下是具体的错误输出:
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()
答案 0 :(得分:2)
您正在使用*
字符,可能是因为它适用于您的shell。使用*
和其他扩展以匹配多个路径的通配符称为“globbing”,而当您的shell自动执行时,大多数其他程序(包括node / javascript / coffeescript)默认情况下不会这样做。正如您所发现的那样,cp
二进制文件本身也不会进行通配。 shell执行globbing,然后将匹配文件/目录列表作为参数传递给cp
。查看节点模块node-glob以执行通配并返回一个匹配文件/目录列表,然后您可以根据需要将其作为参数传递给cp
。请注意,您还可以使用内置此类功能的文件系统模块。请注意,将异步代码直接放入Cakefile可能会出现documented here的问题。