如何使用Ant包含/排除模式从Gradle zip任务中排除所有子目录?
我想创建一个任务,将压缩目录中的所有文件,忽略所有子目录。同时,我希望遍历所有子目录并创建包含这些目录中的文件的ZIP(并忽略任何其他子目录) 因此,对于此目录结构,我需要以下提示:如何使用Ant包含/排除模式从Gradle zip任务中排除所有子目录?,gradle,ant,Gradle,Ant,我想创建一个任务,将压缩目录中的所有文件,忽略所有子目录。同时,我希望遍历所有子目录并创建包含这些目录中的文件的ZIP(并忽略任何其他子目录) 因此,对于此目录结构,我需要以下提示: $ls build/dirA fileA dirB $ls build/dirA/dirB fileB I should get zip/zipA containing fileA, zip/zipB containing fileB. 我使用的代码基于这里的答案:本质上,我为要创建的每个zip工件创建一个z
$ls build/dirA
fileA
dirB
$ls build/dirA/dirB
fileB
I should get zip/zipA containing fileA, zip/zipB containing fileB.
我使用的代码基于这里的答案:本质上,我为要创建的每个zip工件创建一个zip任务,并且依赖于顶级任务
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
和dirB/fileB
请问正确的方法是什么
*注意,我没有在子目录中为迭代设置排除,因为我认为该模式需要与父目录相同,我还没有弄清楚。您可以尝试下面的脚本,它将解决您的问题:
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