Gradle 如何根据子文件夹复制文件和重命名

Gradle 如何根据子文件夹复制文件和重命名,gradle,copy,rename,Gradle,Copy,Rename,我正在尝试复制gradle中的一个文件,同时重命名它,文件的新名称应取决于它所在的子文件夹的名称 我的文件结构如下所示,例如: ├── apk │   └── app-envTest-normalBuild-release.apk ├── logs │   └── manifest-merger-envTest-normalBuild-release-report.txt └── mapping └── envTestNormalBuild └── release

我正在尝试复制gradle中的一个文件,同时重命名它,文件的新名称应取决于它所在的子文件夹的名称

我的文件结构如下所示,例如:

├── apk
│   └── app-envTest-normalBuild-release.apk
├── logs
│   └── manifest-merger-envTest-normalBuild-release-report.txt
└── mapping
    └── envTestNormalBuild
        └── release
            ├── dump.txt
            ├── mapping.txt
            ├── seeds.txt
            └── usage.txt
我想复制mapping.txt并重命名它。新名称应该是mapping-envTestNormalBuild.txt,也就是说,应该包括发布它的子目录的名称

有人能告诉我使用gradle copy+重命名功能是否/如何做到这一点吗

我已经看到了,例如,将foo-bar.txt之类的文件复制到foo/bar.txt或类似的目录/路径。

您可以尝试,例如:

task clean {
  doLast {
    project.file('dest').deleteDir()
  }
}

task cp(type: Copy) {
  dependsOn clean
  from 'mapping/envTestNormalBuild/release'
  into 'dest'
  include 'mapping.txt'
  eachFile { fcp ->
      fcp.name = "$fcp.file.parentFile.parentFile.name-$fcp.name"
  }
}

可以找到一个演示。

可能还有一个问题:这将创建文件,包括在其中找到的子目录。。。我可以通过任何方式跳过这些目录,即将重命名的文件放在我在toPath?@fgysin中指定的实际路径中,我猜它可能是通过配置的。你只需要做一点实验;能够使用…解决它。包括…文件。文件部分确保我们不复制任何目录。