近日在做文件推送的过程中遇到这样的一个场景,由执行机推送制品到虚拟机部署项目,但是为了检查推送是否完成,比如文件丢失,推送失败等等
基于以上场景,想到的解决方案就是推送完成后对比一下源目录和目标目录得文件大小,基本就能就完成校验,具体得命令如下:
check_cmd = "find {} -type f ! -name '*.git' ! -path '*/.git/*' | xargs du -sh -b | ".format(source_path)
source_size = exec_local_cmd(check_cmd + "awk '{sum1+= $1}END{print sum1}'")
check_cmd = "find {} -type f ! -name '*.git' ! -path '*/.git/*' | xargs du -sh -b | ".format(target_path)
target_size = exec_remote_cmd_back_stdout(target_ip, check_cmd + "awk '{sum1+= $1}END{print sum1}'")
source_size = bytes.decode(source_size.stdout).replace('\n', '')
完整的命令应该是酱紫:
find /data/app/info -type f ! -name '*.git' ! -path '*/.git/*' | xargs du -sh -b | awk '{sum1+= $1}END{print sum1}'
du命令本身是有一个问题 就是会重复统计文件夹 这样统计到的大小是会比实际得大
以上简单记录,希望能给遇到类似问题的同学一个思路