Sposta i file se il nome del file non esiste considerando l'estensione

1

Ad esempio, nella cartella A, ho foo.jpg e bar.jpg. Nella cartella B, ho foo.png e foobar.png. Ho solo bisogno di una versione del file indipendentemente dall'estensione, quindi voglio solo spostare foobar.png nella cartella A. Come posso fare questo? Questo è un semplice esempio, ci sono quasi 2.000 file nella cartella B, quindi confrontare manualmente sarebbe molto noioso.

    
posta Sum Guy 27.12.2014 - 17:20
fonte

1 risposta

1

Salva quanto segue come file di testo e rendilo eseguibile. Richiamalo dalla riga di comando, passando i percorsi alla cartella A e alla cartella 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 modificato per controllare il numero di argomenti e correggere l'errore in File.rename

Modificato di nuovo per ignorare il caso. Cioè, non spostare Bar.png se bar.jpg esiste già.

    
risposta data 28.12.2014 - 07:18
fonte

Leggi altre domande sui tag