Saya mencoba menyalin semua file dalam direktori ke direktori lain sebagai bagian dari proses pembuatan saya. Ini berfungsi dengan baik untuk file individual yang saya tentukan secara eksplisit tetapi ketika saya mencoba menyalin seluruh direktori, itu melakukan hal-hal aneh seperti menyalin struktur direktori lengkap (atau tidak sama sekali). Berikut adalah bagian yang relevan dari GruntFile.js saya:
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/" }
]
}
},
Secara khusus itu adalah baris terakhir yang saya tidak bisa mulai bekerja:
{ src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
sumber
cwd
opsi, pastikan untuk berbalikexpand:true
. Jika Anda tidak menyetelnyaexpand:true
, cwd tidak akan bekerja dengan baik.flatten: false
agar ini berfungsi.**/*
Itulah yang saya cari yang saya gunakan ** terima kasih man.Tugas ini akan mempertahankan struktur folder jika Anda menentukan file glob. Yang Anda inginkan adalah
flatten
opsi yang akan menghapus struktur.{ expand: true, flatten: true, src: ['src/html/css/fonts/**'], dest: 'dist/myvoice/css/fonts/', filter: 'isFile' }
Temukan opsi lain yang tersedia di repo Github . Semoga ini membantu.
sumber
Saya ingin menambahkan bahwa mengubah format glob in src akan mengubah cara kerja salinan.
Seperti yang ditunjukkan oleh bmoeskau di atas, berikut ini akan menyalin semua yang ada di dalamnya
dist/
dan memindahkannya kepath/to/dir
(menimpa tujuan jika sudah ada).copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '**' } }
Namun perlu dicatat, bahwa:
copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '*' } }
Hanya akan menyalin file di dalam
dist/
serta direktori, tetapi tidak akan menyalin isi direktori tersebut ke tujuan.Juga, berikut dengan hanya
src: '*/*'
akan menyalin direktori dengan konten di dalamnya . Artinya, file di dalamnya tidak akan disalin.dist/
dist/
copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '*/*' } }
Akhirnya, sama seperti di atas, tetapi hanya
src: '**/**'
akan menyalin file di dalam serta file di dalam subdirektori ke . Jadi tidak akan ada folder di dalam tujuan.dist/
dist/
path/to/dir
copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '*/*', flatten: true, filter: 'isFile' } }
sumber
**
selalu berarti file dan direktori, dan*
hanya file?*
s yang berdekatan digunakan sebagai pola tunggal akan cocok dengan semua file dan nol atau lebih direktori dan subdirektori . Jika diikuti oleh a/
, dua*
s yang berdekatan hanya akan cocok dengan direktori dan subdirektori .**
cocok dengan semuanya , sedangkan**/
hanya direktori dan subdirektori (bukan file).Harus menggunakan egdy sebagai gantinya kurung kurawal untuk segmen file (dalam Coffeescript) ...
copy: { files: [ cwd: 'path/to/files' src: '**/*' dest: 'dist/files' expand: true ] }
sumber
Jika Anda mengembangkan dengan angular yeoman, maka ini adalah cara yang lebih baik untuk menyalin dengan grunt. expand: true diperlukan saat menggunakan cwd. <% = yeoman.app%> hanyalah rute aplikasi ('.').
{ expand: true, cwd: '<%= yeoman.app %>/data', dest: '<%= yeoman.dist %>/data', src: ['**'] }
sumber