2つのディレクトリを比較し、他のサブディレクトリを3番目のディレクトリにコピーします。

2つのディレクトリを比較し、他のサブディレクトリを3番目のディレクトリにコピーします。

DIR1とDIR2という2つのディレクトリがあります。

DIR1 はデフォルトのディレクトリで、新しい変更が頻繁に発生し、時には新しいサブディレクトリが表示されます。 DIR2には以前のバージョンのファイルがあります。

DIR1のサブディレクトリにDIR2の対応するサブディレクトリとは異なるファイルまたは別のファイルがある場合は、これらのサブディレクトリ全体をDIR3にコピーするようにこれら2つのディレクトリを比較したいと思います。

したがって、DIR3には、変更によって識別されたすべてのサブディレクトリを含める必要があります。

答え1

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

上記のブロックは、DIR3の下のDIR1にすべてのディレクトリを作成します。 DIR1の下に新しいディレクトリを作成し、DIR2にない場合は、DIR1の下に新しいディレクトリがあるときにこのコードを実行する必要があります。そうでなければ、一度だけ実行すれば十分です。

それから:

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

関連情報