Рассмотрим (непроверенные) код:
BASE_PATH = 'localhost/Users/Admin/Desktop/html'
puts "Renaming files..."
Dir.glob(File.join(BASE_PATH, '*.html')).each do |old_filename|
new_filename = File.join(
BASE_PATH,
File.basename(old_filename)[/^(.+?)%26rn%/, 1] + '.html'
)
File.rename(old_filename, new_filename)
end
puts "Renaming complete."
Это не гарантирует работу, но это выглядит правильно.
Не используйте однобуквенные переменные, за исключением коротких циклов, на которых вы рассчитываете; Традиционно мы будем использовать i
, j
, k
и т. Д. В этом случае. Для вашего использования используйте что-то более показательное из того, что ваша переменная, old_filename
говорит нам намного больше, чем i
.
Кроме того, не split
строки, делать то, что вы собираетесь и захватить первую часть строки до вашего %26rn%
маркеров:
foo = 'item.htm%3Fid%3D26184136352%26rn%3D490896865329d1a07c116d0fa2ccde83&usg=ALkJrhhLjeT_LoGV64BkCnaLGgNbCgWAAA.html'
foo[/^(.+?)%26rn%/, 1] # => "item.htm%3Fid%3D26184136352"
С, что вы можете увидеть, что здесь происходит:
BASE_PATH = 'localhost/Users/Admin/Desktop/html'
old_filename = 'item.htm%3Fid%3D26184136352%26rn%3D490896865329d1a07c116d0fa2ccde83&usg=ALkJrhhLjeT_LoGV64BkCnaLGgNbCgWAAA.html'
old_filename[/^(.+?)%26rn%/, 1] # => "item.htm%3Fid%3D26184136352"
new_filename = File.join(
BASE_PATH,
File.basename(old_filename)[/^(.+?)%26rn%/, 1] + '.html'
)
new_filename # => "localhost/Users/Admin/Desktop/html/item.htm%3Fid%3D26184136352.html"
Примечание: File.join
знает о подходящем разделителе путей для использования в * nix vs. Windows, а Ruby будет use backslashes or forward-slashes as appropriate. Было бы правильнее написать:
BASE_PATH = File.join(%w[ localhost Users Admin Desktop html ])
# => "localhost/Users/Admin/Desktop/html"
если вы хотите кросс-платформенной совместимости, но для целей примера я использовал 'localhost/Users/Admin/Desktop/html'
ярлык.
'LL = 'item.htm% 3Fid% 3D26184136352% порядка 26RN% 3D490896865329d1a07c116d0fa2ccde83 & USG = ALkJrhhLjeT_LoGV64BkCnaLGgNbCgWAAA.html'' ' ll.split (' % порядка 26RN% '). First' => '" item.htm% 3Fid% 3D26184136352 "' –
Это не решает проблему переименования, спасибо за ваш ввод. – jcuwaz
где проблема? –