如何编写脚本检测文件夹内是否仍有文件在创建?
检测文件夹是否停止文件创建的脚本实现
针对你需要的「文件夹文件列表连续5秒不变则判定停止创建」的需求,这里提供两种常用的实现方案:
Python 实现
用Python写的脚本兼容性好、跨平台,处理特殊文件名也更稳妥:
import os import time def monitor_folder(folder_path, stable_duration=5): last_files = set(os.listdir(folder_path)) stable_timer = 0 check_interval = 1 # 每秒检查一次 while True: current_files = set(os.listdir(folder_path)) if current_files == last_files: stable_timer += check_interval if stable_timer >= stable_duration: print(f"文件夹 {folder_path} 已连续{stable_duration}秒无新文件创建") break else: stable_timer = 0 last_files = current_files time.sleep(check_interval) if __name__ == "__main__": target_folder = "/path/to/your/target/folder" # 替换成你的目标路径 if not os.path.isdir(target_folder): print(f"错误:路径 {target_folder} 不是有效文件夹") exit(1) monitor_folder(target_folder)
逻辑说明
- 用
set存储文件列表,对比效率更高 - 每秒检查一次文件夹内容,若和上次一致则累加计时,直到达到5秒阈值
- 只要文件列表有变化(新增/删除),就重置计时和参考列表
Shell 脚本实现
如果你在Linux/macOS环境下,Shell脚本更轻量,无需额外安装依赖:
#!/bin/bash TARGET_FOLDER="/path/to/your/target/folder" # 替换成你的目标路径 STABLE_DURATION=5 CHECK_INTERVAL=1 if [ ! -d "$TARGET_FOLDER" ]; then echo "错误:路径 $TARGET_FOLDER 不是有效文件夹" exit 1 fi last_files=$(ls -1 "$TARGET_FOLDER") stable_timer=0 while true; do current_files=$(ls -1 "$TARGET_FOLDER") if [ "$current_files" = "$last_files" ]; then stable_timer=$((stable_timer + CHECK_INTERVAL)) if [ "$stable_timer" -ge "$STABLE_DURATION" ]; then echo "文件夹 $TARGET_FOLDER 已连续$STABLE_DURATION秒无新文件创建" break fi else stable_timer=0 last_files="$current_files" fi sleep $CHECK_INTERVAL done
注意事项
ls -1确保每个文件名占一行,避免空格导致的对比错误- 如果要监控子文件夹,可以把
ls -1换成find "$TARGET_FOLDER" -type f来递归获取所有文件 - 文件名包含特殊字符时,Python版本的容错性更强
内容的提问来源于stack exchange,提问作者Dinu Mihai
相关产品推荐
相关产品推荐

