我想创建一个任务,压缩目录中的所有文件,忽略所有子目录。同时,我想遍历所有子目录并创建包含这些目录中文件的zip文件(并忽略任何其他子目录)。
因此,对于这个目录结构,我想要以下拉链:
let resultObj = {};
let array1 = [
{ $key: '1', firstname: 'Ben', lastname: 'Fried', point: 1 },
{ $key: '2', firstname: 'Carlo', lastname: 'Strozzi', point: 5 },
{ $key: '3', firstname: 'Jim', lastname: 'DuBois', point: 8 },
];
let array2 = [
{ $key: '2', firstname: 'Carlo', lastname: 'Strozzi', point: 3 },
{ $key: '4', firstname: 'Larry', lastname: 'Page', point: 10 },
];
for (let i = 0; i < array1.length; i++) {
resultObj[array1[i].$key] = array1[i];
}
for (let i = 0; i < array2.length; i++) {
resultObj[array2[i].$key] = array2[i];
}
console.log(Object.values(resultObj));
我正在使用基于答案的代码:gradle task to zip multiple directories independently基本上,我为每个要创建的zip工件创建一个zip任务,并依赖于顶级任务。
$ls build/dirA
fileA
dirB
$ls build/dirA/dirB
fileB
I should get zip/zipA containing fileA, zip/zipB containing fileB.
问题似乎在于排除模式。我得到子目录的正确拉链,但父目录包括task myZip() {
file('build').eachDir { dir ->
dir.eachDir { sub ->
dependsOn tasks.create("zip$sub.name", Zip) {
from sub
baseName sub.name
destinationDir file('zip')
}
}
dependsOn tasks.create("zip$dir.name", Zip) {
from dir
baseName dir.name
excludes ['*/**']
destinationDir file('zip')
}
}
}
和fileA
。
请问这样做的正确方法是什么?
*注意我没有通过子目录对迭代进行排除,因为我认为这个模式需要与父目录相同,我还没有想到。
答案 0 :(得分:1)
您可以尝试以下脚本,它可以解决您的问题:
import static groovy.io.FileType.DIRECTORIES
task myZip {
file('folder').traverse(type: DIRECTORIES) {
def path = it.path
def zipFile = it.name + '.zip'
ant.zip(destfile: zipFile){
fileset(dir: path) {
include (name: "*")
type (type: "file")
}
}
}
doLast {
copy {
from "."
include "*.zip"
into file("zip")
}
}
}
以下是一些示例测试:
$ tree folder
folder
└── dirA
├── dirB
│ ├── dirC
│ │ ├── dirD
│ │ └── fileC
│ └── fileB
└── fileA
4 directories, 3 files
它会将三个zip文件生成到zip文件夹和根文件夹中。
$ ls -1 zip/
dirA.zip
dirB.zip
dirC.zip