Я хочу переименовать и добавить номера в кучу файлов уроков, которые я скачал с YouTube.Они, однако, в неправильном порядке.У меня есть список всех правильных имен в порядке их просмотра.
Так что моя идея состоит в том, чтобы взять этот список, создать из него хеш-коды с ключами, которые впоследствии будут использоваться в качестве нумерации файлов, а значением будет фактическое имя файла.После этого я буду сортировать свои хэши для ключей, перебирать свой каталог и переименовывать все файлы, включенные в каталог.
У меня есть следующий код прямо сейчас:
1 #!/usr/bin/ruby
2
3 counter = 0
4
5 folder_path = "SOME_PATH"
6 names = Hash.new
7
8 file = File.new("names.txt", "r")
9 while (line = file.gets)
10 #puts "#{counter}: #{line}"
11 names[sprintf '%03d', counter] = line
12 counter += 1
13 end
14 file.close
15
16 puts "======== Names before sorting: \n ========"
17 puts names
18
19 names.keys.sort
20
21 puts "======== Names after sorting: \n ========"
22 puts names
23
24
25
26 new_filename = ""
27 counter = 0
28 Dir.glob(folder_path + "/*").each do |f|
29 #puts "#{counter}: #{File.basename(f, File.extname(f))}"
30 numbering = (sprintf '%03d', counter)
31 new_filename = numbering + " - " + names[numbering]
32
33 File.rename(f, folder_path + "/" + new_filename + File.extname(f))
34 counter += 1
35 end
36
37 puts "Renaming complete."
Проблемытеперь мои хеши не сортируются.Я думаю, это потому, что мои значения ключей на самом деле являются строковыми, а не числами, но как иначе я достигну нулей ведущих для моего переименования?
Сам процесс переименования тоже не совсем работает.Кажется, это работает для первых двух видео, но затем я получаю следующее сообщение об ошибке:
main.rb:33:in `rename': No such file or directory - PATH - .mp4 or PATH - - Dot and Cross Product Comparison/Intuition (Errno::ENOENT)
РЕДАКТИРОВАТЬ:
Ух ты, мой плохой.Я не проверял names.txt.На самом деле это было имя с косой чертой.Таким образом, вызывая вышеприведенное сообщение об ошибке.
Я выполнил сортировку с 'names.index (names.values.sort [counter])'