gpt4 book ai didi

ruby - 递归复制不包括文件夹匹配过滤器

转载 作者:数据小太阳 更新时间:2023-10-29 06:49:25 24 4
gpt4 key购买 nike

我正在尝试创建一种 Rake 方法,将所有文件从一个位置复制到另一个位置,但排除所有属于 SVN 文件夹的文件夹,包括它们的文件。

这是我开始使用的名为 Filesystem 的模块中的方法,但无法确定它是否有效或缺少的代码是什么。该模块具有以下要求:

require "fileutils"

方法:

def FileSystem.CopyFilesWithoutSVN(source, target)
# will copy files from source folder to target folder excluding .svn folders
FileUtils.cp_r Dir.glob( source ).reject{|entry| entry =~ missingCode }, target
end

例如,源将是:

folderA
folderB
file1.cs
file2.cs
file3.cs
file4.cs
.svn
fileA.base
fileB.base
.svn
fileC.base
fileD.base
folderC
file5.cs

然后目标将在复制后包含以下内容:

folderA
folderB
file1.cs
file2.cs
file3.cs
file4.cs
folderC
file5.cs

最佳答案

这种事情最简单的解决方案是使用 rsync ,前提是您的软件正在安装它的系统上运行。

`rsync -a --exclude=.svn #{source}/ #{target}`

您可能还想添加 --delete 选项以删除目标树中不再存在于源树中的现有文件。

作为奖励,它只会在您下次运行时复制新的或修改过的文件。您还可以使用它通过网络跨系统复制文件。有关更多信息,请参阅文档。


如果你没有rsync可用,或者不想让你的代码依赖它,你可以使用下面的方法:

require 'find'
require 'fileutils'

def copy_without_svn(source_path, target_path)
Find.find(source_path) do |source|
target = source.sub(/^#{source_path}/, target_path)
if File.directory? source
Find.prune if File.basename(source) == '.svn'
FileUtils.mkdir target unless File.exists? target
else
FileUtils.copy source, target
end
end
end

Find是 Ruby 标准库的一部分。

关于ruby - 递归复制不包括文件夹匹配过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11776089/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com