我对Ruby非常陌生,并通过第一个脚本分析出我最喜欢的颜色,并将其重复给我。我正在做我认为相对简单的任务,移动文件和更改名称。
我在子目录中有一堆文件,我需要移动到一个目录,然后附加所有这些文件的文件名。具体需要保留原始名称并添加到最后,IE AAB701.jpg - > AAB701_01.jpg。
我已设法找到文件并移动它们(可能效率不高),但我没有附加到文件名的运气。谷歌搜索,stackoverflow等,没有运气。
这是我现在的代码。
require 'find'
require "fileutils"
file_paths = []
Find.find('../../../Downloads') do |path|
file_paths << path if path =~ /.*\.jpg$/
end
file_paths.each do |filename|
name = File.basename('filename')
dest_folder = "../../../Desktop/Testing/"
FileUtils.cp(filename, dest_folder)
end
file_paths.each do |fullname|
append_txt = '_01'
filename = "*.jpg"
fullname = File.join(filename, append_txt)
end
实际路径非常无关紧要,但我对File.join或gsub不够熟悉,无法弄清楚什么是错误的/最好的。
答案 0 :(得分:0)
我会修改你对FileUtils.cp的调用。
append_txt = '_01'
file_paths.each do |filename|
name = File.basename('filename')
newname = name + append_txt # + File.extension()
dest_folder = "../../../Desktop/Testing/"
FileUtils.cp(filename, dest_folder + newname)
end
请注意,此代码对恶意文件名不安全;你应该搜索文件处理文档以获得另一种方法。
答案 1 :(得分:0)
首先,我将一些工作提取到一个小方法中:
def new_name(fn, dest = '../../../Desktop/Testing/', append = '_01')
ext = File.extname(fn)
File.join( dest, File.basename(fn, ext) + append + ext )
end
然后我将更多功能样式应用于您的目录遍历和处理:
Dir[ '../../../Downloads/**/*.jpg' ].
select { |fn| File.file? fn }.
each { |fn| FileUtils.cp fn, new_name(fn) }
另外,我没有看到Find
模块通过Dir#[]
购买了什么,而dir glob让你免费过滤到jpgs。
答案 2 :(得分:0)
一个更简单的答案是文件:
require 'pathname'
new_name =Pathname(orig_fn).sub_ext("01#{Pathname(orig_fn).extname}").to_s