Копировать задачу в 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()
1 ответ
Вы используете *
характер, вероятно, потому что это работает для вас в вашей оболочке. С помощью *
и другие символы подстановки, которые расширяются, чтобы соответствовать нескольким путям, называются " globbing", и хотя ваша оболочка делает это автоматически, большинство других программ, включая node/javascript/coffeescript, не будут делать это по умолчанию. Так же cp
Сам бинарный не делает сглаживания, как вы обнаруживаете. Оболочка выполняет глобализацию, а затем передает список подходящих файлов / каталогов в качестве аргументов cp
, Посмотрите на модуль узла node-glob, чтобы выполнить глобализацию, и верните вам список подходящих файлов / каталогов, которые вы можете затем передать cp
в качестве аргументов, если хотите. Обратите внимание, что вы также можете использовать модуль файловой системы, в который встроены функциональные возможности этого типа. Однако обратите внимание, что размещение асинхронного кода непосредственно в Cakefile может быть проблематичным, как описано здесь.