在CentOS系统中,使用readdir函数可以帮助你读取目录内容,但要实现文件同步,你需要编写一个脚本来比较源目录和目标目录的文件,并根据需要进行复制或删除操作。以下是一个简单的示例脚本,用于同步两个目录:
#!/bin/bash
# 源目录和目标目录
src_dir="/path/to/source/directory"
dest_dir="/path/to/destination/directory"
# 确保目标目录存在
if [ ! -d "$dest_dir" ]; then
mkdir -p "$dest_dir"
fi
# 遍历源目录中的文件和子目录
while IFS= read -r -d $'\0' file; do
# 获取相对路径
relative_path="${file#$src_dir/}"
dest_file="$dest_dir/$relative_path"
# 检查文件是否存在
if [ -e "$dest_file" ]; then
# 如果文件大小不同,则覆盖
if [ ! -s "$file" ] || [ ! -s "$dest_file" ] || [ "$(stat -c%s "$file")" -ne "$(stat -c%s "$dest_file")" ]; then
cp --preserve=timestamps "$file" "$dest_file"
fi
else
# 如果文件不存在,则复制
mkdir -p "$(dirname "$dest_file")"
cp --preserve=timestamps "$file" "$dest_file"
fi
done < <(find "$src_dir" -type f -print0)
# 删除目标目录中源目录不存在的文件
while IFS= read -r -d $'\0' file; do
relative_path="${file#$src_dir/}"
dest_file="$dest_dir/$relative_path"
if [ ! -e "$src_dir/$relative_path" ]; then
rm --preserve=timestamps "$dest_file"
fi
done < <(find "$dest_dir" -type f -print0)
将此脚本保存为sync_directories.sh,并使用chmod +x sync_directories.sh使其可执行。然后,你可以使用./sync_directories.sh命令来同步源目录和目标目录。
请注意,这个脚本仅适用于文件同步,不包括子目录中的符号链接。如果你需要处理符号链接,你可能需要修改脚本以适应你的需求。