我會去它是這樣的:
files = %w[
tree001.jpg tree03.jpg tree9.jpg
apple1.jpg apple002.jpg
plum3.jpg plum300.jpg
].shuffle
# => ["tree001.jpg", "apple1.jpg", "tree9.jpg", "plum300.jpg", "apple002.jpg", "plum3.jpg", "tree03.jpg"]
grouped_files = files.group_by{ |fn| fn[/^[a-z]+/i] }
# => {"tree"=>["tree001.jpg", "tree9.jpg", "tree03.jpg"], "apple"=>["apple1.jpg", "apple002.jpg"], "plum"=>["plum300.jpg", "plum3.jpg"]}
grouped_files.each do |grp, files|
Dir.mkdir(grp) unless Dir.exist(grp)
files.each { |f| FileUtils.mv(f, "#{grp}/#{f}") }
end
我無法測試,因爲我沒有所有的文件,也不是我願意生成它們。
重要的是group_by
。它可以很容易地對類似命名的文件進行分組,從而輕鬆瀏覽它們。
對於您的情況,您需要使用Dir.glob(...)
或Dir.entries(...)
替換指定爲files
以獲取文件列表。
如果你想單獨從文件名的文件路徑,看看File.split
或File.dirname
和File.basename
:
File.split('/path/to/foo')
=> ["/path/to", "foo"]
File.dirname('/path/to/foo')
=> "/path/to"
File.basename('/path/to/foo')
=> "foo"
我們有很多想法如何做到這一點,但沒有人會適合你的代碼」除非您向我們展示您的作品請通過編輯將您的代碼添加到問題中,我們很樂意爲您提供幫助。 –