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

Posted

技术标签:

【中文标题】如何根据子文件夹复制文件和重命名【英文标题】:How to copy file and rename depending on subfolder 【发布时间】:2017-08-04 11:18:29 【问题描述】:

我正在尝试在 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 复制+重命名功能?

我见过reverse is possible,即将foo-bar.txt之类的文件复制到foo/bar.txt等目录/路径。

【问题讨论】:

【参考方案1】:

你可以试试例如:

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"
  

可以在here找到一个演示。

【讨论】:

也许还有一个问题:这将创建包含子目录的文件......我可以通过任何方式跳过这些目录,即将重命名的文件放在我在@中指定的实际路径中987654324@? @fgysin,我猜可能是通过FileCopyDetails配置的。你只需要尝试一下;) 能够使用from ... .include("...").files 解决它。 files 部分确保我们不复制任何目录。

以上是关于如何根据子文件夹复制文件和重命名的主要内容,如果未能解决你的问题,请参考以下文章

使用文件夹名称复制和重命名文件的批处理文件

如何使用环境变量复制和重命名文件?

如何使用 CopyWebpackPlugin 复制和重命名文件

如何在 Linux 中批量移动复制追加和重命名文件

如何批量复制和重命名文件从一个文件夹到另一个文件夹?

如何使用shell复制和重命名多个文件