inotify 是 Linux 系统中的一种文件系统事件监控机制,可以用来监控文件或目录的变化,如创建、删除、修改等。通过 inotify,你可以编写脚本来实现文件的自动同步。以下是一个基本的步骤指南,展示如何使用 inotifywait(inotify 的一个常用命令行工具)来实现文件同步。
首先,确保你的系统上安装了 inotify-tools。如果没有安装,可以使用包管理器进行安装。
对于基于 Debian 的系统(如 Ubuntu):
sudo apt-get update
sudo apt-get install inotify-tools
对于基于 Red Hat 的系统(如 CentOS):
sudo yum install epel-release
sudo yum install inotify-tools
创建一个脚本文件,例如 sync_files.sh,并添加以下内容:
#!/bin/bash
# 源目录和目标目录
SOURCE_DIR="/path/to/source"
TARGET_DIR="/path/to/target"
# 使用 inotifywait 监控源目录
inotifywait -m -r -e create,delete,modify --format '%w%f' "$SOURCE_DIR" | while read FILE
do
# 获取相对路径
RELATIVE_PATH="${FILE#$SOURCE_DIR}"
TARGET_FILE="$TARGET_DIR$RELATIVE_PATH"
# 创建目标目录(如果不存在)
mkdir -p "$(dirname "$TARGET_FILE")"
# 同步文件
rsync -av --delete "$FILE" "$TARGET_FILE"
done
inotifywait -m -r -e create,delete,modify --format '%w%f' "$SOURCE_DIR":
-m:监控模式,持续监控。-r:递归监控子目录。-e create,delete,modify:监控的事件类型,包括创建、删除和修改。--format '%w%f':输出格式,显示文件的完整路径。while read FILE:读取 inotifywait 输出的文件路径。
RELATIVE_PATH="${FILE#$SOURCE_DIR}":获取文件相对于源目录的路径。
TARGET_FILE="$TARGET_DIR$RELATIVE_PATH":构建目标文件的完整路径。
mkdir -p "$(dirname "$TARGET_FILE")":创建目标文件所在的目录(如果不存在)。
rsync -av --delete "$FILE" "$TARGET_FILE":使用 rsync 同步文件,-a 表示归档模式,-v 表示详细输出,--delete 表示删除目标目录中源目录不存在的文件。
确保脚本具有执行权限:
chmod +x sync_files.sh
然后运行脚本:
./sync_files.sh
inotify 可能会有性能瓶颈。可以考虑使用更高级的工具或优化脚本。通过以上步骤,你可以使用 inotify 实现基本的文件同步功能。根据具体需求,你可以进一步扩展和优化脚本。