• ベストアンサー

Ruby1.9で上書き禁止でのファイルコピーする方法について。

Ruby1.9で上書き禁止でのファイルコピーする方法について。 次のようなロジックを組んでいますが、同一ファイルがある場合でも上書きをしてしまいます。 同一ファイルは上書きさせないようにするにはどうすれも良いでしょうか? file1 = "C:/*.*" file2 = "C:/デバッグ用2/" FileUtils.cp(Dir.glob(file1),file2) どうか宜しくお願い致します。

  • Ruby
  • 回答数2
  • ありがとう数17

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

file1とfile2 に含まれるファイル名の差分配列を作成すればOKです。 file1 = "C:/*.*" file2 = "C:/デバッグ用2/" file2_list = Dir.entries file2 FileUtils.cp(Dir.glob(file1).reject{|f| file2_list.index File.basename(f)},file2)

NOBU4517
質問者

お礼

いつも的確なご回答頂き有難う御座います。 記載頂いたロジックにて、やりたいことがうまく出来ました。 ロジックを勉強させていただき有難うございました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

1ファイルずつ、File.exist? で調べながらコピーするしかないでしょうね。

NOBU4517
質問者

お礼

ご回答頂き有難う御座います。 研究させて頂きます。

関連するQ&A

  • Rubyのファイル上書き

    rubyの初心者です。 ファイルの上書きをしたいのですが、File.open(filename,"a") ブロック を使うとファイルの一番下に文章が追加されてしまいます。 元のファイルの上にデータを追加したいと考えています。 今はファイルを配列にまとめて、データを加えて並び替えてとごちゃごちゃしたやり方になってしまっています。 なにかスマートな方法があればご教授ください。

    • ベストアンサー
    • Ruby
  • Windowsのフォルダ・ファイルのコピーでの強制上書きする方法につい

    Windowsのフォルダ・ファイルのコピーでの強制上書きする方法について。 WindowsXPを使っているのですが、フォルダ・ファイルをコピーするときに コピー先に同じフォルダ・ファイルがあると、上書き確認ダイアログが表示されるのですが この上書き確認ダイアログを表示せずに、強制上書きする方法は有りますでしょうか。? ネットで調べたら、cpコマンドをコマンドプロンプトで行う方法はあるようなのですが、 できればコマンドプロンプトではなく、GUIでやりたいです。 よろしくお願いいたします。

  • {Ruby}Dir.globの結果を引数として代入

    こんにちは。 当方Ruby初心者です。 最近Dir.globのメソッドを使用しているのですが、 Dir.globで取得した結果を1つずつ引数として取り出すにはどのようなメソッドを 組めば良いのでしょうか? ご教授の程よろしくお願い致します。

  • OSによるcpコマンドの動作違いに関して(特にリンクファイルのコピー)

    cpコマンドでシンボリックリンクファイルをコピーする際にlinux版のcpではリンクのままコピーされますが、solaris版ではハードコピーされてしまいます。 リンクをリンクのままとしてコピーするにはtarを使うなど他の方法も考えられますが、出来ればコピーコマンドのオプションによって簡単に出来たら楽と思っています。 どのようにしたらよいのでしょうか? <cpのバージョンを使い分ける、オプションを与える等々> また、linux版でも「あるファイルのリンクのリンク」をコピーすると元ファイルまで辿って新しいリンクファイルが作成される様です。これを直接コマンドラインで指定したファイルのリンクとしたい場合どのようなオプションを与えるのが良いのでしょうか? 細かな内容で申し訳在りませんが、宜しくお願いいたします。 ------ [linux(Redhat8)版cp]  touch file; ln -s file linked_file cp -R linked_file aaa ※ aaa はfileのシンボリックリンクになる /bin/cp --version cp (fileutils) 4.1.9 著者 Torbjorn Granlund, David MacKenzie, and Jim Meyering. Copyright (C) 2002 Free Software Foundation, Inc. [solaris(sunos5.8)版cp] ※ 上と同じコマンド実行でcpは実ファイルになる /mp/suel/tool/bin/cp --version cp (GNU fileutils) 4.0

  • makefileでファイルをコピー(更新)する方法

    似たような質問がありますが、ちょっと条件が違う(と思う)ので質問させてください。 makeを使って異なるディレクトリに散らばったファイルを一つのディレクトリにコピーしたいと思います。 (条件1)コピー元ディレクトリは、変数SRCDIRSで指定されるものとする。 (条件2)コピー先ディレクトリは、変数DSTDIRで指定されるものとする。 (条件3)コピーすべきファイルは、変数FILESで指定されるものとする。 で、次のようにmakefileを書いてみました。 SRCDIRS = dir-a dir-b dir-c DSTDIR = out-dir FILES = a.c b.c c.c d.c e.c OUTFILES = $(addprefix $(DSTDIR)/ , $(FILES)) all : copyfiles copyfiles : $(OUTFILES) vpath %.c $(SRCDIRS) $(OUTFILES) : %.c : $(notdir %.c) ____cp -u $@ $(DSTDIR)/ こんな感じです。 vpathを指定することで、カレントディレクトリにない%.cファイルはvpathの中から自動的に探してくれることを期待しているのですが、最後の依存関係ルールの書き方では%.cファイルの依存関係が自己参照になっているようで意図したようには解釈されていないようです。 上のような動作をさせるには、どのように書くのが適切でしょうか? なお、SRCDIRSで指定したディレクトリ内に同じ名前のファイルは存在しないものとします。 よろしくお願いします。

  • 上書きコピーについて

    パソコンのことについてまだあまりよく分からない点があるので、質問させて頂きます。 あるゲームにバグがみつかり、修正パッチをダウンロードしたのですが、方法がイマイチよく分かりません。 間違えたらゲームの情報がなくなってしまうのではないかと思うと思い切ったことも出来ず…。 説明には 『本製品をインストールしたフォルダに存在する同名のファイルを上書きコピーして下さい。』 とあるのですが、この上書きコピーの方法がイマイチ分かりません。 普通に移動させるだけで良いのでしょうか…? ぜひ、パソコンにあまり詳しくない私にも分かるように説明をお願い致します。

    • ベストアンサー
    • Mac
  • ファイルのコピーを禁止する方法?

    ファイルのコピーを禁止する方法ってあるものでしょうか? 読み取り専用にするとか、パスワードを設定するとかの意味ではなく、コピー&ペーストをできなくするというそのままの意味です。 (特に用途は想定していない純粋な質問です) よろしくお願いします。

  • Rubyのスクリプト

    Rubyを使って、ディレクトリを順に処理していくスクリプトを作ろうとしています。 下記は、perlのものです。 chdir("C:/data"); opendir(DIR, "./"); @myfolderlist= grep(-d, readdir(DIR)); close(DIR); foreach $myfolder(@myfolderlist){ if(($myfolder ne ".") && ($myfolder ne ".." )){ print "$myfolder\n"; } } これに対応するような、かつRubyらしい(foreachを使う)スクリプトを作りたいと考えます。 Dir.foreach('C:/Data'){|item| item.chomp! print item,"\n" } 上記のRubyスクリプトの問題は、ディレクトリのみならず、そこに存在するファイルまで出してしまいます。 Rubyにおいて、ディレクトリ」のみを持ってくるには、どのようにすれば良いでしょうか? 宜しくお願いいたします。

  • cp -f でも上書き確認が出てしまう。。

    上書き確認を出さずにファイルをコピーしたいのですが、 -f を付けても上書き確認が出てしまいます。 cp だけだと、これも上書き確認が出ます。 確認を出さすにコピーするにはどうしたら良いでしょうか。

  • Rubyにて、ファイルコピーする際に指定したbyte毎にファイルをコピ

    Rubyにて、ファイルコピーする際に指定したbyte毎にファイルをコピーしていく方法 いつもお世話になっております。 Rubyのコーディング方法で分からないことがあります。 大変申し訳ございませんが、ご教授のほどよろしくお願い致します。 【ご質問】 以下のファイルがあるとします。 ファイル名:test.log ファイルサイズ:2G 上記ファイルを500Mずつに分けてコピーしたい場合、 どのようにコーディングすればファイルを分けながらコピー出来るのでしょうか? 例) 【コピー元ファイル】 ファイル名:test.log ファイルサイズ:2G 【コピー先のファイル】 ファイル名:test.log.1 ファイルサイズ:500M ファイル名:test.log.2 ファイルサイズ:500M ファイル名:test.log.3 ファイルサイズ:500M ファイル名:test.log.4 ファイルサイズ:500M ※コピー先のファイル名には、  コピー元のファイル名+「.」+「1からの数字の連番」でファイル名を割り振りたいです。 以上です。 よろしくお願い致します。

    • ベストアンサー
    • Ruby

専門家に質問してみよう