Сверните свое собственное использование IO.syswrite, IO.sysread.
Сначала определите длину индикатора выполнения (в символах) .. затем этот псевдокод должен это сделать (НЕ ПРОВЕРЕН):
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 () - ваш метод увеличения индикатора выполнения на один символ.
Вышеуказанное не проверено и, вероятно, приведет к заболеванию рубиновых пуристов. В частности, исключение EOFException может испортить цикл. Также вам понадобится какой-то способ убедиться, что все байты записаны, если no_of_bytes не является целым числом.