如何在bash/sh中编写脚本比较文件夹的递归总大小?
Bash脚本判断两个文件夹递归总大小是否相等
要可靠获取文件夹的递归总字节数并判断是否相等,可以用du命令的-sb参数配合文本处理工具提取纯字节数,具体实现如下:
核心思路
du -sb <目录路径>:-s表示只输出目录的总大小(递归包含所有子文件和子文件夹),-b强制以字节为单位统计,输出格式为[字节数] [目录路径]- 用
awk '{print $1}'提取输出结果中的第一个字段(纯数字的字节数)
完整脚本示例
# 定义源目录和目标目录路径(可根据实际修改,支持带空格的路径) source="./source" dest="./dest" # 获取两个目录的递归总字节数 sourceSizeInBytes=$(du -sb "$source" | awk '{print $1}') destSizeInBytes=$(du -sb "$dest" | awk '{print $1}') # 判断大小是否相等 if [ "$sourceSizeInBytes" -eq "$destSizeInBytes" ]; then echo "两个文件夹总大小相等,执行指定操作..." # 在这里添加你需要执行的操作 else echo "两个文件夹总大小不相等" fi
注意事项
- 目录路径如果包含空格或特殊字符,必须用双引号包裹变量,避免解析错误
du -sb是POSIX兼容的参数组合,在GNU/Linux、BSD等主流类Unix系统上都能正常工作- 对于超大目录,
du命令会遍历所有文件,耗时较长,属于正常现象
内容的提问来源于stack exchange,提问作者Kristi Jorgji
相关产品推荐
相关产品推荐

