0

私は Ruby に非常に慣れていないため、過去の最初のスクリプトを分岐して、好きな色は何かを尋ね、それを繰り返します。ファイルを移動して名前を変更するという、比較的単純な作業だと思っていたことを実行しています。

サブディレクトリに多数のファイルがあり、それらを単一のディレクトリに移動してから、それらすべてのファイル名を追加する必要があります。具体的には、元の名前を保持し、最後に IE AAB701.jpg -> AAB701_01.jpg を追加する必要があります。

ファイルを見つけて移動することはできましたが(おそらく非効率的です)、ファイル名に追加することができません。Google検索、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 に精通しておらず、何が間違っているか、何が最善かを判断できません。

4

3 に答える 3

1

まず、いくつかの作業を小さなメソッドに抽出します。

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を使用すると、無料でjpgにフィルターできます。

于 2013-02-28T07:17:59.657 に答える
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

このコードは、悪意のあるファイル名に対して安全ではないことに注意してください。これを行う別の方法については、ファイル処理ドキュメントを検索する必要があります。

于 2013-02-28T06:34:26.707 に答える