Comparando 2 diretórios e copiando os diferentes subdiretórios para um terceiro diretório

0

eu tenho dois diretórios DIR1 e DIR2

DIR1 é o diretório base, onde novas alterações são frequentes, às vezes novos subdiretórios também. DIR2 tem uma versão antiga dos arquivos.

Eu quero comparar estes dois diretórios, de tal forma que se qualquer um dos subdiretórios do DIR1 tiver qualquer arquivo que seja novo / diferente do respectivo subdiretório do DIR2, ele deverá copiar o subdiretório respectivo inteiro para DIR3.

Por isso, o DIR3 deve ter todos os subdiretórios identificados com a mudança.

    
por SOAPractitioner 11.02.2016 / 20:37

1 resposta

0

 for dir in $(find DIR1 -type d) ;do
   newdir=$(echo ${dir} | sed -e "1,1s/^DIR1/DIR3/")
   mkdir -p ${newdir}
 done

Este bloco acima cria todos os diretórios em DIR1 sob DIR3. Se você estiver criando novos diretórios em DIR1, que não estão em DIR2, você deve executar este snippet quando houver novos diretórios sob DIR1, caso contrário, executá-lo uma vez será suficiente

Então:

for file in $(find DIR1 -type f) ;do
  oldfile=$(echo ${file} | sed -e "1,1s/^DIR1/DIR2/")
  if [ -f ${oldfile} ]
  then
    diff ${file} ${oldfile} >/dev/null; r=${?}
    if [ $r -ne 0 ]
    then
      newfile=$(echo ${file} | sed -e "1,1s/^DIR1/DIR3/")
      cp ${file} ${newfile}
    fi
  else
    newfile=$(echo ${file} | sed -e "1,1s/^DIR1/DIR3/")
    cp ${file} ${newfile}
  fi
done
    
por 11.02.2016 / 21:00