Mover archivos si el nombre del archivo no existe considerando la extensión

1

Por ejemplo, en la carpeta A, tengo foo.jpg y bar.jpg. En la carpeta B, tengo foo.png y foobar.png. Solo necesito una versión del archivo sin importar la extensión, así que solo quiero mover foobar.png a la carpeta A. ¿Cómo puedo hacer esto? Este es un ejemplo simple, hay casi 2,000 archivos en la carpeta B, por lo que la comparación manual sería muy tediosa.

    
pregunta Sum Guy 27.12.2014 - 17:20

1 respuesta

1

Guarde lo siguiente como un archivo de texto y hágalo ejecutable. Invoquelo desde la línea de comandos, pasando las rutas a la carpeta A y la carpeta B.

#!/usr/bin/ruby

if ARGV.size != 2
    STDERR.print "#Usage: #{$0} source/folder destination/folder\n"
    exit 1
end

a = ARGV[0].chomp("/")
b = ARGV[1].chomp("/")
old_bases = Hash.new
Dir.foreach(b) do |f| 
    next if f =~ /^\./
    old_bases[f.sub(/\.[^.]*$/, "").downcase] = true
end
Dir.foreach(a) do |f|
    next if f =~ /^\./
    fbase = f.sub(/.[^.]*$/, "").downcase
    unless old_bases[fbase]
        File.rename( "#{a}/#{f}", "#{b}/#{f}" )
        old_bases[fbase] = true
    end
end

Script editado para verificar el número de argumentos y corregir el error en File.rename

Editado de nuevo para ignorar el caso. Es decir, no muevas Bar.png si bar.jpg ya existe.

    
respondido por el ganbustein 28.12.2014 - 07:18

Lea otras preguntas en las etiquetas