質問

私はverboseするtrueオプションを設定しようとしましたが、それはただのようです(現在FileUtils.cpを使用して)ルビーを使用してファイルをコピーするときに、ファイルのコピー操作の進行状況を表示できるようにしたいのですが私に発行したコピーコマンドを表示します。

私は、理想的に、私はSCPのようなものを提示できるようにしたいのですが、それをコピーしたファイルが、私がいる限り、私はできる限りのプレゼンテーションについてあまりfussedないんだけどない場合、現時点では、コマンドラインからこのスクリプトを実行していますよ進行状況を確認ます。

役に立ちましたか?

解決

私はまだここに答えを編集するのに十分な担当者を持っていないので、私のバージョンはpisswillis回答に基づいている、私は<のhref =「http://0xcc.net/ruby-progressbar/index.html.en」が見つかり私も私の例で使用しているのrel =「nofollowをnoreferrer」タイトル=「プログレスバーの宝石」>プログレスバーの宝石に。私はこれをテストしているし、それは今のところOK取り組んできましたが、それはいくつかのクリーンアップを行うことができます:

require 'rubygems'
require 'progressbar'

in_name     = "src_file.txt"
out_name    = "dest_file.txt"

in_file     = File.new(in_name, "r")
out_file    = File.new(out_name, "w")

in_size     = File.size(in_name)
# Edit: float division.
batch_bytes = ( in_size / 100.0 ).ceil
total       = 0
p_bar       = ProgressBar.new('Copying', 100)

buffer      = in_file.sysread(batch_bytes)
while total < in_size do
 out_file.syswrite(buffer)
 p_bar.inc
 total += batch_bytes
 if (in_size - total) < batch_bytes
   batch_bytes = (in_size - total)
 end
 buffer = in_file.sysread(batch_bytes)
end
p_bar.finish

他のヒント

IO.syswrite、IO.sysreadを使用して独自のロールます。

まず、(TESTED NOT)、この擬似コードは、それを行う必要があります。..(文字数)プログレスバーの長さを決めます:

infile = File.new("source", "r")
outfile = File.new("target", "w")

no_of_bytes = infile.length / PROGRESS_BAR_LENGTH

buffer = infile.sysread(no_of_bytes)
while buffer do
 outfile = syswrite(buffer)
 update_progress_bar()
 buffer = infile.sysread(no_of_bytes)
end

ここでupdate_progress_bar()は1つのcharでプログレスバーをインクリメントするためにあなたの方法です。 上記テストされていないと、おそらくルビーの純粋主義者が病気になります。特に、ループアップてEOFExceptionのかもしれない混乱。また、あなたはno_of_bytesが整数でない場合は、すべてのバイトが書かれていることを確認することのいくつかの方法が必要になります。

それはあなたが好きなプログレスバーの場合は、

それとも、ただ、それはSCPを使用するハックができます:

def copy(source, dest)
  `scp #{source} localhost:#{dest}`
end

あなたは、ソースとdest名が正しくシステムコールのためにエスケープされていることを確認する必要があります。 localhost:タグは、それがコンピュータ間で行うように、それはプログレスバーが表示されますので、SCPは、ファイルをコピーします。

Windowsの下では、「WB」とバイナリファイルの「RB」でなければなりませんので、「W」と「R」、バイナリファイルの「b」を追加することを忘れないでください。

in_file     = File.new(in_name, "rb")
out_file    = File.new(out_name, "wb")
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top