web-dev-qa-db-ja.com

Rubyでファイルの名前を変更する方法は?

これが私の.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ファイルがある場所に移動されます。移動せずに、その場でファイルの名前を変更したいと思います。

何をすべきか提案はありますか?

54
delete

単純にどうですか:

File.rename(f, folder_path + "/" + filename.capitalize + File.extname(f))
89
Mat

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."

編集:それはマットが私と同じ答えを与えているように見えますが、わずかに異なる方法でのみです。

24
Preacher

変更するファイルと同じ場所で実行している場合

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

正直なところ、私は時々Rubyを使用することの意味がわからない場合があります...シェルでファイル名が単に解釈される限り、おそらく必要はありません:

`mv test.txt hope.txt`
16
boulder_ruby

Linuxファイルシステムを使用している場合は、mv #{filename} newname

File.rename(old、new)を使用することもできます

2
Steve

こんにちは、私はRubyクラスを作成しました。これはディレクトリを反復し、これとその子から再帰的にファイルの名前を変更します。

https://github.com/halleyrv/rename-files

0
HalleyRios

ファイル名を適切に引用する準備ができていない限り、このパターンを使用しないでください。

`mv test.txt hope.txt`

確かに、「hope.txt」の代わりに「foo the bar.txt」というファイルがあると仮定すると、結果は期待したものにはなりません。

0
Nicola Mingotti