在系统管理中,比较两个目录的内容是一项常见任务,尤其在数据备份和服务器维护时,它显得尤为重要。为此,我们可以使用 Shell 脚本来简化这个过程,实现自动化。下面将对一个名为 compare_files.sh 的脚本进行详细介绍,该脚本能够比较目录大小并使用 rsync 检查内容一致性。
# 日志文件路径
LOG_FILE="directory_size_log.txt"
Count="count.txt"
# 目录1和目录2的路径
DIR1="/data/rcywwd"
DIR2="/data1/rcyywd"
# 开始记录日志
echo "开始执行脚本 $(date)" > "$LOG_FILE"
# 获取两个目录的大小
size1=$(du -sb "$DIR1" | awk '{print $1}')
size2=$(du -sb "$DIR2" | awk '{print $1}')
# 记录调试信息
echo "Size of $DIR1 is $size1 bytes" >> "$LOG_FILE"
echo "Size of $DIR2 is $size2 bytes" >> "$LOG_FILE"
# 比较目录大小并记录日志
if [ "$size1" -eq "$size2" ]; then
echo "两个目录的大小一致:$DIR1 大小为 $size1 bytes,$DIR2 大小为 $size2 bytes" >> "$LOG_FILE"
else
echo "两个目录的大小不一致:$DIR1 大小为 $size1 bytes,$DIR2 大小为 $size2 bytes" >> "$LOG_FILE"
fi
# 使用 rsync 进行详细比较(干运行)
echo "正在使用 rsync 检查目录内容是否一致..." >> "$LOG_FILE"
rsync -av --dry-run "$DIR1/" "$DIR2/" >> "$LOG_FILE" 2>&1
# 捕获 rsync 的退出状态
if [ $? -eq 0 ]; then
echo "两个目录的内容完全一致,不需要同步。" >> "$LOG_FILE"
echo "两个目录的内容完全一致,不需要同步。" > "$Count"
echo "data一级目录详细信息" >> "$Count"
du -ah --max-depth=1 "$DIR1" | sort -rh >> "$Count"
echo "data1一级目录详细信息" >> "$Count"
du -ah --max-depth=1 "$DIR2" | sort -rh >> "$Count"
else
echo "发现不一致的文件,执行同步将会产生更改。" >> "$LOG_FILE"
fi
# 结束记录日志
echo "脚本执行结束 $(date)" >> "$LOG_FILE"
该脚本适合以下场景:
1、例行检查备份系统的一致性,确保数据准确和完整;
2、自动化管理不同服务器间的数据同步前检查;
3、减少人工检查工作量并降低错误风险。
compare_files.sh
提供了一种自动化的方式来检查和管理多个目录的内容一致性。通过使用 Shell 脚本和 rsync
的强大功能,它能显著提高运维效率,减少人工干预和潜在错误。这种机制对确保数据的完整性和一致性极为有用。
如果喜欢这篇文章,请点下方在看,
后续推荐更多类似文章