我的目录结构如下:
dir -|
|
- sub_dir1 -|
| |
| - file1
|
- sub_dir2 -|
| |
| - file2
|
- sub_dir3 -|
|
- file3
我要递归删除dir
以外的所有内容sub-dir1
因此,预期的结果目录结构应如下所示:
dir -|
|
- sub_dir1 -|
|
- file1
我尝试了以下代码,它删除了sub_dir1
内容之外的所有文件。但是,它不会删除其他子目录,而只会删除那些目录中的文件。
delete fileTree(dir: "dir1").exclude("sub_dir1").include('**/**')
以上代码的结果:
dir -|
|
- sub_dir1 -|
| |
| - file1
|
- sub_dir2
|
|
- sub_dir3
如何删除这些目录及其包含的文件?
答案 0 :(得分:1)
好吧,问题在于high - low >=k
只对文件感兴趣,因此不会返回目录。但是,可以使用FileTree
方法来迭代文件和目录。这样,您可以简化解决方案,使其类似于以下内容。它使用Gradle visit
功能,但需要多次调用fileTree
:
delete
另一个选择是使用Groovy直接提供的功能:
fileTree('dir').exclude('sub_dir1').visit { delete it.file }
仍然需要多次调用file('dir').eachDirMatch({ !it.equals('sub_dir1') }, { delete it })
。与Gradles delete
的{{1}}调用相比,该过滤器还比较丑陋。可以通过Groovy exclude
使用直接过滤,然后可以将其放入单个FileTree
语句中,因为它可以处理collect
个对象中的delete
个。但是,这很可能需要更多详细的代码,因此我建议选择建议的第一个选项。
答案 1 :(得分:0)
目前,我设法使用以下代码实现了自己的要求:
Arrays.stream(new File("dir").list()).forEach {
f -> if (f != "sub_dir1") {
delete "dir/${f}"
}
}
欢迎采用更好的方法。