изменить расширение файла скриптом ruby - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь изменить размер файла, передавая аргументы консоли

system = "rename" , "'s/\#{ARGV[0]}$/\#{ARGV[1]}'", "*#{ARGV[1]}"

Код правильный, потому что он работает на консоли, но когда я помещаю его в скрипт, у меня возникают проблемы с

s/\#

потому что он отображается розовым цветом, а консоль не получает его.

1 Ответ

0 голосов
/ 26 апреля 2018
  1. Вы не хотите отправлять буквальные одинарные кавычки, поэтому удалите их.
  2. вы хотите удалить обратную косую черту, чтобы позволить Ruby оценить эти выражения.
  3. вы пропустили косую черту.
  4. что делает этот знак равенства?
  5. Вы хотите ARGV[0] в последнем аргументе переименовать вместо ARGV [1]?
  6. вы хотите использовать * подстановочный знак, который требует расширения оболочки до списка файлов, что означает, что вы не можете использовать форму списка system

Попробуйте

system "/usr/bin/rename -n 's/#{ARGV[0]}$/#{ARGV[1]}/' *#{ARGV[0]}"

Удалите опцию -n, если похоже, что вы собираетесь переименовать так, как хотите.


И, конечно, вам не нужно вызывать оболочку для этого:

Dir.glob("*#{ARGV[0]}").each {|fname| 
    newname = fname.sub(/#{ARGV[0]}$/, ARGV[1])
    File.rename(fname, newname)
}
...