2017-06-12 15 views
1

同じパターンのディレクトリから別のディレクトリにフォルダやファイルをコピーするとRubyスクリプトを作成したいと思います。例えばパターンマッチングディレクトリ内の特定のファイルを取得する方法Ruby

、私はあるディレクトリのパターン検索する場合:

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

をそれができる:

  • ./file/drive_Temp/abc/tools/
  • ./file/drive_Temp/def/tools/
  • ./file/drive_Temp/xyz/tools/

は限り前部が「./file/drive_Temp/」で始まり、 『/ツール/』で終わるよう。


私は何をしたい新しいディレクトリに述べたように、ディレクトリのパターンを満たすすべてのファイルをコピーすることです。

などの次のディレクトリにあるいくつかのファイルがある場合があります。

  • ./file/drive_Temp/abc/tools/aaa.txt
  • ./file/drive_Temp/abc/tools/bbb.txt
  • ./file/drive_Temp/abc/tools/ccc.txt
  • ./file/drive_Temp/def/tools/zzz.txt
  • ./file/drive_Temp/def/tools/yyy.txt
  • ./file/drive_Temp/def/tools/qqq.txt
  • ./file/drive_Temp/xyz/tools/ttt.txt
  • ./file/drive_Temp/xyz/tools/jjj.txt

これらのtxtファイルは、ツール

というディレクトリへの移動になりますこれは私のコードです:

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

ダブルアスタリスクは機能していませんか?フォルダを指定されたディレクトリに移動できなかったためです。代わりにglobを使用する必要がありますか?

+0

私はあなたのロジックが少し壊れていると思います。./file/drive_Temp/abc/の下にある 'tools'ディレクトリの最初のコピーの後にmvコマンドを実行しても、コマンドは./file/drive_Temp/def/の 'tools'ディレクトリとしてエラーを送出します既に存在するだろう。あなたが達成しようとしていることをアドバイスしてください。 – grail

+0

私は私の質問に変更を加えました。フォルダが存在するかどうかを確認して、ディレクトリ内のファイルを新しいディレクトリに移動したい場合 – kerrysugu

+0

既存のフォルダをチェックする必要はなく、 'Dir'を使用してそのディレクトリ内のファイルを直接取得できますパターン。投稿された回答を確認してください。 – Gerry

答えて

0

あなたはそれらのディレクトリ内のすべてのファイルを取得するためにDirを使用して、このように、これらの各ファイルを移動するために反復することができます:

これは すでに./Toolsに存在して任意のファイルを置き換えること
Dir["./file/drive_Temp/**/tools/*"].each do |file| 
    FileUtils.mv(file, './Tools') 
end 

お知らせ;そのような行動を回避する必要がある場合、ファイルが既に移動される場合は、チェックすることができ、たとえば、それを移動する前.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 
+0

./Toolsに 'file'が既に存在するとどうなりますか? – grail

+0

@grail 'file'はターゲットディレクトリのファイルを上書きします(つまり、'。/ Tools')。 – Gerry

+0

@grailそれを指摘してくれてありがとう、それはOPによって明示的に要求されていなくても、それは関連情報であり、答えに留意して検討すべきである(少なくとも代替手段として)。 – Gerry

関連する問題