DIR1과 DIR2라는 2개의 디렉토리가 있습니다.
DIR1은 기본 디렉터리이며 새로운 변경 사항이 자주 발생하며 때로는 새로운 하위 디렉터리가 나타납니다. DIR2에는 이전 버전의 파일이 있습니다.
DIR1의 하위 디렉터리에 DIR2의 해당 하위 디렉터리와 새롭거나 다른 파일이 있는 경우 해당 하위 디렉터리 전체를 DIR3에 복사하도록 이 두 디렉터리를 비교하고 싶습니다.
따라서 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