2011-04-03 13 views
42

Aquí está mi archivo .rb:¿Cómo cambiar el nombre de un archivo en Ruby?

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

Los archivos se moverán de su directorio inicial hasta donde se encuentra el archivo .rb. Me gustaría cambiar el nombre de los archivos en el lugar, sin moverlos.

¿Alguna sugerencia sobre qué hacer?

+0

¿De qué manera se mueven y no se renombran? ¿Se movieron físicamente en la memoria, quieres decir? ¿Qué te hace creer eso? Por favor explique por qué el código actual no es satisfactorio. –

Respuesta

75

¿Qué pasa simplemente:

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

Si usted está en un sistema de archivos de Linux podría intentar mv #{filename} newname

También puede utilizar File.rename (viejo, nuevo)

+1

Prefiero no usar comandos de Terminal y simplemente usar Ruby. Este script está destinado a ejecutarse en Windows y Linux. Solo un pequeño guión de ayuda que estoy escribiendo para aprender sobre Ruby. –

+0

respuesta actualizada, entonces – Steve

21

NO el folder_path tiene que ser parte del nombre del archivo?

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

editar: aparece Mat está dando la misma respuesta que yo, solo que de una manera ligeramente diferente.

+0

Sí, pero su respuesta explica por qué - que siempre es bueno :) –

13

Si se está ejecutando en la misma ubicación que el archivo que desea cambiar

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

Aunque honestamente, a veces no veo el sentido en el uso de rubí en absoluto ... no es necesario, probablemente, siempre y cuando los nombres de archivo simplemente se interpretan en el shell:

`mv test.txt hope.txt` 
+0

Esto se ve interesante. Me encantaría ver alguna explicación de cómo funciona esto. – superluminary

+1

Esto no funciona para mí – User16119012

0

no utilice este patrón a menos que esté listo para poner citando alrededor de nombres de archivo correcto:

`mv test.txt hope.txt` 

De hecho, suponga que en lugar de "hope.txt" tiene un archivo llamado "foo the bar.txt", el resultado no será el esperado.

Cuestiones relacionadas