# 查找两个目录的差异,并将只存在new中的文件拷贝到old中
diff -bur new/ old/ |grep "只在 new/.*存在" > needcopy.txt
# 复制路径到第二列,生成cp new/*** old/*** 的指令
cat needcopy.txt | \
sed 's|只在 ||g' | sed 's| 存在:|/|g' | \
awk '{ printf("\"%s\" \"%s\"\n", $0, $0) }' | \
awk 'BEGIN { FS=" " } { sub("new","old",$2); print $0 }' | \
awk 'BEGIN { FS=" " } { print "cp", $0 }'
假设needcopy.txt的内容如下:
只在 new/squashfs-root/usr/lib 存在:libbluetooth.so
只在 new/squashfs-root/usr/lib 存在:libbluetooth.so.3
只在 new/squashfs-root/usr/lib 存在:libbluetooth.so.3.19.7
那么,脚本执行后,输出结果如下:
cp "new/squashfs-root/usr/lib/libbluetooth.so" "old/squashfs-root/usr/lib/libbluetooth.so"
cp "new/squashfs-root/usr/lib/libbluetooth.so.3" "old/squashfs-root/usr/lib/libbluetooth.so.3"
cp "new/squashfs-root/usr/lib/libbluetooth.so.3.19.7" "old/squashfs-root/usr/lib/libbluetooth.so.3.19.7"