使用 Shell 脚本比较和同步目录:自动化文件管理的利器

文摘   2024-10-29 23:06   北京  

在系统管理中,比较两个目录的内容是一项常见任务,尤其在数据备份和服务器维护时,它显得尤为重要。为此,我们可以使用 Shell 脚本来简化这个过程,实现自动化。下面将对一个名为 compare_files.sh 的脚本进行详细介绍,该脚本能够比较目录大小并使用 rsync 检查内容一致性。

#!/bin/bash
# 日志文件路径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" ]; thenecho "两个目录的大小一致:$DIR1 大小为 $size1 bytes,$DIR2 大小为 $size2 bytes" >> "$LOG_FILE"elseecho "两个目录的大小不一致:$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 ]; thenecho "两个目录的内容完全一致,不需要同步。" >> "$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"elseecho "发现不一致的文件,执行同步将会产生更改。" >> "$LOG_FILE"fi
# 结束记录日志echo "脚本执行结束 $(date)" >> "$LOG_FILE"

该脚本适合以下场景:

1、例行检查备份系统的一致性,确保数据准确和完整;

2、自动化管理不同服务器间的数据同步前检查;

3、减少人工检查工作量并降低错误风险。

compare_files.sh 提供了一种自动化的方式来检查和管理多个目录的内容一致性。通过使用 Shell 脚本和 rsync 的强大功能,它能显著提高运维效率,减少人工干预和潜在错误。这种机制对确保数据的完整性和一致性极为有用。

如果喜欢这篇文章,请点下方在看,

后续推荐更多类似文章 

日常运维文档
多做实验,少做自己!分享一些日常运维和学习文档,欢迎大家一起交流。
 最新文章