我有 2 个目录 DIR1 和 DIR2
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