如何复制文件夹 - FAKE F#MAKE

时间:2017-03-30 08:37:03

标签: f# f#-3.0 f#-fake

我使用FAKE的Copy功能将文件从project1复制到release文件夹,我使用下面的代码:

Target "CopyProject1" (fun _ ->
    !!(buildDir @@ "/_PublishWebsites/Project1/**/*.*")
        |> Copy releaseDir
)

将文件从Project1文件夹复制到release文件夹,然后Project1中的所有文件都被复制到release文件夹,但是我想在我的release文件夹中维护Project1的文件夹结构,即我想复制Project1的文件夹以释放,这是可能的还是我将不得不在我的发布文件夹中创建子文件夹并逐个复制。如果没有这样做的方法,那么这可能是使用自定义任务吗?

如果有人可以在这方面提供帮助,那将非常有帮助。

3 个答案:

答案 0 :(得分:3)

可以通过CopyWithSubfoldersTo获得。它的描述说:

  

将多个文件组(每个文件组由FileIncludes对象复制)复制到目标文件夹,保留从每个FileIncludes的BaseDirectory开始的文件夹结构。

参数与Copy:

相同
Target "CopyProject1" (fun _ ->
    [!!(buildDir @@ "/_PublishWebsites/Project1/**/*.*")]
        |> CopyWithSubfoldersTo releaseDir
)

修改

CopyWithSubfoldersTo适用于seq<FileInculdes>,而!!则返回单FileIncludes。必须先将其转换为单个元素列表才能使用它。

答案 1 :(得分:2)

我使用了FAKE的CopyDir功能,这是递归复制目录,我们只需要给出我们要复制文件夹的文件夹名称和目标位置。这是代码:

Target "CopyFoldersTargetLocation" (fun _ ->
    CopyDir targetDir SourceDir allFiles
)

答案 2 :(得分:0)

由于其他解决方案不适用于我的情况,因此这是我使用基本.NET方法自制的解决方案:

let rec copyFilesRecursively (source: DirectoryInfo) (target: DirectoryInfo) =
    source.GetDirectories()
    |> Seq.iter (fun dir -> CopyFilesRecursively dir (target.CreateSubdirectory dir.Name))
    source.GetFiles()
    |> Seq.iter (fun file -> file.CopyTo(target.FullName @@ file.Name, true) |> ignore)

Target "CopyProject1" <| fun _ ->
    let source = buildDir @@ "/_PublishWebsites/Project1/"
    let target = releaseDir
    copyFilesRecursively (directoryInfo source) (directoryInfo target)