我正在尝试复制目录列表中的所有文件,并将它们粘贴到输出目录中。问题是,每当我使用*时,输出都表示不存在该名称的文件或目录。以下是具体的错误输出:
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()
您使用的是*
字符,可能是因为它适用于您的shell。使用*
和其他扩展为匹配多个路径的通配符被称为"globbing",虽然您的shell会自动执行此操作,但包括node/javascript/coffeescript在内的大多数其他程序默认情况下不会执行此操作。此外,正如您所发现的,cp
二进制文件本身并不进行全局化。shell执行globbing,然后将匹配文件/目录的列表作为参数传递给cp
。查看节点模块node glob以执行globbing,并返回匹配文件/目录的列表,然后如果愿意,可以将其作为参数传递给cp
。请注意,您也可以使用内置此类功能的文件系统模块。但是,请注意,如本文所述,将异步代码直接放入Cakefile可能会有问题。