本文目录导读:

- 使用Python的watchdog库(推荐)
- 使用inotify-tools(Linux)
- 使用Node.js的chokidar
- 使用Shell脚本实现简单监控
- 使用fswatch(跨平台)
- 实用示例:自动备份修改的文件
- 推荐选择
使用Python的watchdog库(推荐)
安装
pip install watchdog
示例脚本
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class MyHandler(FileSystemEventHandler):
def on_modified(self, event):
if not event.is_directory:
print(f"文件被修改: {event.src_path}")
def on_created(self, event):
print(f"文件被创建: {event.src_path}")
def on_deleted(self, event):
print(f"文件被删除: {event.src_path}")
def on_moved(self, event):
print(f"文件被移动: {event.src_path} -> {event.dest_path}")
def monitor_directory(path):
event_handler = MyHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=True)
observer.start()
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
if __name__ == "__main__":
monitor_directory("./watch_folder") # 监控当前目录下的watch_folder文件夹
使用inotify-tools(Linux)
安装
sudo apt-get install inotify-tools # Ubuntu/Debian sudo yum install inotify-tools # CentOS/RHEL
示例脚本
#!/bin/bash
# 监控文件变化
inotifywait -m -r -e modify,create,delete,move /path/to/watch |
while read path action file; do
echo "文件: $file"
echo "操作: $action"
echo "路径: $path"
echo "---"
# 执行自定义操作
case "$action" in
"MODIFY")
echo "文件被修改: $file"
;;
"CREATE")
echo "文件被创建: $file"
;;
"DELETE")
echo "文件被删除: $file"
;;
esac
done
使用Node.js的chokidar
安装
npm install chokidar
示例脚本
const chokidar = require('chokidar');
// 初始化监控
const watcher = chokidar.watch('./watch_folder', {
ignored: /(^|[\/\\])\../, // 忽略隐藏文件
persistent: true,
ignoreInitial: true
});
// 事件监听
watcher
.on('add', path => console.log(`文件添加: ${path}`))
.on('change', path => console.log(`文件修改: ${path}`))
.on('unlink', path => console.log(`文件删除: ${path}`))
.on('addDir', path => console.log(`目录添加: ${path}`))
.on('unlinkDir', path => console.log(`目录删除: ${path}`))
.on('error', error => console.error(`监控错误: ${error}`))
.on('ready', () => console.log('监控已就绪'));
console.log('正在监控文件夹变化...');
使用Shell脚本实现简单监控
#!/bin/bash
watch_dir="/path/to/watch"
previous_file=""
while true; do
# 获取目录下所有文件的最新修改时间
current_status=$(find "$watch_dir" -type f -printf "%T@ %p\n" | sort -n | tail -1)
if [ "$current_status" != "$previous_file" ]; then
echo "文件有变化: $(date)"
echo "$current_status"
previous_file="$current_status"
# 这里可以添加自定义操作
# rsync备份
# rsync -avz "$watch_dir" user@backup-server:/backup/
fi
sleep 5 # 每5秒检查一次
done
使用fswatch(跨平台)
安装
# macOS brew install fswatch # Linux sudo apt-get install fswatch # 或从源码编译
示例脚本
#!/bin/bash
fswatch -o /path/to/watch | while read change; do
echo "检测到文件变化: $(date)"
echo "变化数量: $change"
# 获取具体变化的文件
fswatch -0 /path/to/watch | while read -d "" event; do
echo "文件: $event"
done
done
实用示例:自动备份修改的文件
import time
import shutil
import os
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
from datetime import datetime
class BackupHandler(FileSystemEventHandler):
def __init__(self, backup_dir):
self.backup_dir = backup_dir
if not os.path.exists(backup_dir):
os.makedirs(backup_dir)
def on_modified(self, event):
if not event.is_directory:
# 创建备份文件名(包含时间戳)
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
filename = os.path.basename(event.src_path)
backup_filename = f"{timestamp}_{filename}"
backup_path = os.path.join(self.backup_dir, backup_filename)
try:
shutil.copy2(event.src_path, backup_path)
print(f"备份文件: {event.src_path} -> {backup_path}")
except Exception as e:
print(f"备份失败: {e}")
# 使用示例
if __name__ == "__main__":
watch_path = "./important_files"
backup_path = "./backups"
observer = Observer()
handler = BackupHandler(backup_path)
observer.schedule(handler, watch_path, recursive=True)
observer.start()
print(f"开始监控: {watch_path}")
print(f"备份目录: {backup_path}")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
print("\n监控已停止")
observer.join()
推荐选择
- 跨平台且简单:Python + watchdog
- Linux系统高效:inotify-tools
- Web开发环境:Node.js + chokidar
- 简单快速部署:Shell脚本
选择哪种方案取决于您的具体需求、操作系统环境和技术栈偏好。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播