shell脚本对比两个同样目录下文件是否相同,不同则从patch目录复制到sdk源文件目录
代码说明:
定义了两个变量sdk和sdk_diff,分别表示sdk和sdk_diff的值。
定义了一个函数func,用于遍历目录下的文件和子目录,并通过比较补丁文件和sdk文件的内容来判断是否需要复制补丁文件到sdk文件中。
在函数中,通过ls命令获取参数$1目录下的文件和子目录,并使用for循环遍历。
判断遍历到的是文件还是目录,如果是文件,则获取补丁文件的路径,并根据规则将sdk_diff替换为sdk来得到sdk文件的路径。
使用cmp命令比较补丁文件和sdk文件的内容是否相同,如果不相同,则复制补丁文件到sdk文件。
如果遍历到的是目录,则递归调用func函数。
最后,调用func函数,传入sdk_diff作为参数,输出合入成功的提示信息。
#!/bin/bash
sdk="rk3588"
sdk_diff="rk3588_patch_doc"
func (){
for doc_name in `ls $1`
do
if [ -f "$1/$doc_name" ];then
#遍历后得到补丁文件的路径,带文件名:sdk_diff/dirver/led/led.c
diff_file="$1/$doc_name"
#文件名替换,sdk_diff替换文sdk :sdk/dirver/led/led.c
sdk_file=${diff_file//$sdk_diff/$sdk}
#sdk_diff/dirver/led/led.c sdk/dirver/led/led.c
if ! cmp -s "$diff_file" "$sdk_file"; then
echo "发现$sdk_file与$diff_file文件不相同"
echo "复制$diff_file文件到$sdk_file"
cp -af "$diff_file" "$sdk_file"
fi
elif [ -d "$1/$doc_name" ];then
func "$1/$doc_name"
else
exit 0
fi
done
}
func $sdk_diff
echo "$sdk 已合入成功!!!"