Как переименовать файл в Ruby? - PullRequest
53 голосов
/ 03 апреля 2011

Вот мой файл .rb:

puts "Renaming files..."

folder_path = "/home/papuccino1/Desktop/Test"
Dir.glob(folder_path + "/*").sort.each do |f|
    filename = File.basename(f, File.extname(f))
    File.rename(f, filename.capitalize + File.extname(f))
end

puts "Renaming complete."

Файлы перемещаются из исходного каталога в каталог, где находится файл .rb. Я хотел бы переименовать файлы на месте, не перемещая их.

Любые предложения о том, что делать?

Ответы [ 5 ]

88 голосов
/ 03 апреля 2011

А как же просто:

File.rename(f, folder_path + "/" + filename.capitalize + File.extname(f))
24 голосов
/ 03 апреля 2011

Не должен ли folder_path быть частью имени файла?

puts "Renaming files..."

folder_path = "/home/papuccino1/Desktop/Test/"
Dir.glob(folder_path + "*").sort.each do |f|
  filename = File.basename(f, File.extname(f))
  File.rename(f, folder_path + filename.capitalize + File.extname(f))
end

puts "Renaming complete."

edit: кажется, Мэт дает тот же ответ, что и я, только немного по-другому.

16 голосов
/ 12 октября 2012

Если вы работаете в том же месте, что и файл, который хотите изменить

File.rename("test.txt", "hope.txt")

Хотя, если честно, иногда я не вижу смысла в использовании ruby ​​вообще ... нет необходимостивероятно, до тех пор, пока ваши имена файлов просто интерпретируются в оболочке:

`mv test.txt hope.txt`
2 голосов
/ 03 апреля 2011

Если вы находитесь в файловой системе Linux, вы можете попробовать mv #{filename} newname

Вы также можете использовать File.rename (старый, новый)

0 голосов
/ 14 февраля 2018

Не используйте этот шаблон, если вы не готовы поставить правильные кавычки вокруг имен файлов:

`mv test.txt hope.txt`

Действительно, предположим, что вместо «hope.txt» у вас есть файл с именем «foo the bar.txt»", результат не будет тем, что вы ожидаете.

...