如何获取模式匹配目录中的特定文件Ruby

How to get the specific files in pattern-matching directory Ruby

我想写一个 Ruby 脚本来查找相同模式的目录,然后将其中的文件夹和文件复制到另一个目录。

例如,如果我想找到一个目录模式:

"./file/drive_Temp/**/tools/"

可以是:

只要前面部分以“./file/drive_Temp/”开头,以“/tools/”结尾即可。


我想做的是将所有符合上述目录模式的文件复制到一个新目录中:

以下目录中可能有一些文件,例如:

这些 txt 文件将移动到名为 Tools

的目录中

这是我的代码:

if File.directory?('./file/drive_Temp/**/tools')
    FileUtils.mv './file/drive_Temp/**/tools/*.*','./Tools'
end

双星号不起作用?因为无法将文件夹移动到指定的目录。或者我应该改用 glob 吗?

您可以使用 Dir 获取这些目录中的所有文件,并迭代移动每个文件,如下所示:

Dir["./file/drive_Temp/**/tools/*"].each do |file|
  FileUtils.mv(file, './Tools')
end

请注意,这将替换 ./Tools 中已经存在的任何文件;如果需要避免这种行为,那么你可以在移动之前检查要移动的文件是否已经存在于.Tools中,例如:

target_dir = "./Tools"

Dir["./file/drive_Temp/**/tools/*"].each do |file|
  if File.exist?("#{target_dir}/#{File.basename(file)}")
    # Handle file with duplicate name.
  else
    FileUtils.mv(file, target_dir)
  end
end