У меня есть много каталогов с именами файлов с именами txt. Я хочу сделать копии файлов txt, переименовать их в соответствии с содержащим их каталогом, а затем переместить их в родительский каталог (который является каталогом, в котором хранятся исходные файлы txt, обозначенные как «txts» в скрипте ниже). Я хочу сохранить исходные файлы txt с их оригинальными именами в своих исходных каталогах, так что ничего в исходных каталогах не изменится.Как скопировать файлы и переименовать их в соответствии с их исходными каталогами с помощью Ruby?
У меня есть старый сценарий, который я думаю, что достигнуто (некоторые) мои цели один раз, возможно перемещение вместо копирования оригинальных текстовые файлы, но я не могу запустить его успешно в настоящее время:
require 'find'
require 'fileutils'
Find.find("txts") do |path|
if FileTest.directory?(path)
next
end
ret = path.scan(/.*txts\/([^\/]+)\/.*/)
name = ret[0].to_s + ".txt"
FileUtils.mv(path, name)
end
лет назад друг написал это и успешно провел его из среды unix. Когда я запускаю его сейчас, возвращается огромное количество ошибок. Я использую Ruby 2.2.2, и вполне возможно, что где-то есть местозаполнитель, который я слишком новичок, чтобы узнать, или, возможно, что-то изменилось из старой версии FileUtils ... Я действительно не знаю и боюсь, что я был не в состоянии получить ответы на мои навыки неофита.
И поэтому я обращаюсь к вам ...
Edit: Вот сообщение об ошибке:
C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1328:in `stat': Invalid argument @ rb_file
_s_stat - ["may2013"].txt (Errno::EINVAL)
from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1328:in `lstat'
from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1247:in `exist?'
from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:519:in `block in mv'
from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1570:in `block in fu_each_src
_dest'
from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1586:in `fu_each_src_dest0'
from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:1568:in `fu_each_src_dest'
from C:/Ruby22/lib/ruby/2.2.0/fileutils.rb:516:in `mv'
from extracttxt.rb:12:in `block in <main>'
from C:/Ruby22/lib/ruby/2.2.0/find.rb:48:in `block (2 levels) in find'
from C:/Ruby22/lib/ruby/2.2.0/find.rb:47:in `catch'
from C:/Ruby22/lib/ruby/2.2.0/find.rb:47:in `block in find'
from C:/Ruby22/lib/ruby/2.2.0/find.rb:42:in `each'
from C:/Ruby22/lib/ruby/2.2.0/find.rb:42:in `find'
from extracttxt.rb:6:in `<main>'
Пожалуйста, разместите сообщение об ошибке. –
Добавлен в тему. Благодарю. – rufus