Estou tentando copiar todos os arquivos de um diretório para outro como parte do meu processo de construção. Funciona bem para arquivos individuais que eu especifico explicitamente, mas quando tento copiar todo o diretório, ele faz coisas estranhas como copiar a estrutura completa do diretório (ou nada). Aqui está a parte relevante do meu GruntFile.js:
copy: {
myvoice: {
files: [
{ src:"src/html/index.html", dest:"dist/myvoice/index.html" },
{ src:"src/html/css/style.css", dest:"dist/myvoice/css/style.css" },
{ src:"src/html/js/require.js", dest:"dist/myvoice/js/require.js" },
{ src:"build/myvoice/main.js", dest:"dist/myvoice/js/main.js" },
{ src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
]
}
},
Especificamente, é a última linha que não consigo fazer:
{ src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
fonte
cwd
opções, certifique-se de virarexpand:true
. Se você não definirexpand:true
, o cwd não funcionará corretamente.flatten: false
para fazer isso funcionar.**/*
Isso é o que eu estava procurando, eu estava usando ** obrigado cara.Esta tarefa manterá a estrutura de pastas se você especificar um arquivo glob. O que você quer é a
flatten
opção que removerá a estrutura.Encontre o resto das opções disponíveis no repositório Github . Espero que isto ajude.
fonte
Eu gostaria de acrescentar que mudando o formato do glob em src modificará o funcionamento da cópia.
Conforme apontado por bmoeskau acima, o seguinte irá copiar tudo dentro
dist/
e mover parapath/to/dir
(sobrescrevendo o destino se ele já existir).Observe, entretanto, que:
Copia apenas arquivos dentro
dist/
e também de diretórios, mas não copiará o conteúdo desses diretórios para o destino.Além disso, a seguinte com
src: '*/*'
vontade única copiar diretórios com conteúdo dentrodist/
. Ou seja, os arquivos que estiverem lá dentrodist/
não serão copiados.Finalmente, o mesmo que acima, mas
src: '**/**'
irá copiar apenas os arquivos dentrodist/
, bem como os arquivos dentro dosdist/
subdiretórios parapath/to/dir
. Portanto, não haverá pastas dentro do destino.fonte
**
sempre significa arquivos e diretórios, e*
apenas arquivos?*
s adjacentes usados como um único padrão irão corresponder a todos os arquivos e zero ou mais diretórios e subdiretórios . Se seguido por a/
, dois*
s adjacentes corresponderão apenas a diretórios e subdiretórios .**
corresponde a tudo , enquanto**/
apenas diretórios e subdiretórios (não arquivos).Tive que usar chaves egdy em vez de chaves para o segmento de arquivos (em Coffeescript) ...
fonte
Se você estiver desenvolvendo com o Angular Yeoman, esta é a melhor maneira de copiar com o Grunt. expand: true é necessário ao usar cwd. <% = yeoman.app%> é apenas a rota do aplicativo ('.').
fonte