qx(mkdir -p merged);
qx(rm -rf merged/*);
qx(cp -p $ARGV[0]/* merged 2>/dev/null); #se si passa una cartella a cp, viene dato un errore, quindi facciamo il redirect di STDERR in /dev/null. cp -p consente di copiare il file senza alterare la data di ultima modifica
@to_copy = qx(ls $ARGV[1]);
chomp @to_copy;
for $file (@to_copy){
    if(qx(ls merged/$file 2>/dev/null) eq "merged/$file\n"){ #se in merged è già stato copiato il file che voglio copiare dalla seconda cartella...
        if(qx(cp -vup $ARGV[1]/$file merged 2>/dev/null) ne ""){#lancio cp con: -u sovrascrive il file SOLO se la data di modifica è più recente; -v stampa il path del file se la copia va a buon fine, non stampa nulla altrimenti 
            $owner{$file}=$ARGV[1]; #se ha stampato il path del file, vuol dire che è stata tenuta la copia presente nella seconda cartella
        }
        $overwritten{$file}=1;#in ogni caso, visto che il file è già presente in merged, lo contrassegno come SOVRASCRITTO
    }else{
        qx(cp -p $ARGV[1]/$file merged 2>/dev/null); #il file non è duplicato, lo copio e basta
        $owner{$file}=$ARGV[1];#tengo traccia che si tratta di un file che si trovava nella seconda cartella
    }
}
@all = qx(ls merged);
chomp @all;
qx(echo "">merged.log); #se merged.log non esiste lo creo, altrimenti lo svuoto.
for $f (@all){#per ogni file in merged
    $new_line=$f." ";
    if(defined $owner{$f}){#se ho tenuto traccia di chi è il proprietario (vuol dire che potrebbe essere duplicato o comunque presente nella seconda cartella)
        $new_line.=": $owner{$f}/$f  ";
        if(defined $overwritten{$f}){#controllo se è un duplicato
            $new_line.=": SOVRASCRITTO";
        }
    }
    else{
        $new_line.=": $ARGV[0]/$f";#altrimenti si tratta di un file che arriva dalla prima cartella
    }
    qx(echo "$new_line" >> merged.log)#appendo nel file di log
}
