我想编写一个Ruby脚本,可以查找来自同一模式的目录,然后将文件夹和文件复制到另一个目录中。
例如,如果我想找到一个目录模式:
“./文件/ drive_Temp / ** /工具/”
可以是:
只要前面部分以“./file/drive_Temp/”开头并以“/ tools /".
结尾我想要做的是将符合所述目录模式的所有文件复制到新目录:
以下目录中可能包含以下文件:
这些txt文件将移动到名为Tools
的目录这是我的代码:
if File.directory?('./file/drive_Temp/**/tools')
FileUtils.mv './file/drive_Temp/**/tools/*.*','./Tools'
end
双星号不起作用吗?因为该文件夹无法移动到指定的目录。或者我应该使用glob
代替吗?
答案 0 :(得分:2)
您可以使用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