如何编写Bash脚本实现查找文件时每找到10个就暂停10秒再继续
Bash遍历文件批量休眠的修复方案
原有代码核心问题
- 逻辑结构错误:计数判断放在循环外部,仅会在脚本启动时执行一次,无法在每找到10个文件时触发休眠逻辑
- 子shell变量隔离:通过管道将find结果传给while循环时,while运行在独立子shell中,循环内修改的
x变量无法同步到父shell,计数逻辑完全失效
修复后可运行代码
#!/bin/bash declare -i x=0 # 替换为你要遍历的目标文件夹路径 TARGET_DIR="/myfolder" # 用进程替换替代管道,避免子shell问题 while read -r file; do echo "$file" ((x++)) # 每处理10个文件执行一次休眠 if (( x == 10 )); then echo "已累计找到10个文件,休眠10秒后继续执行" sleep 10 # 重置计数器,下次计数到10再次触发休眠 x=0 fi done < <(find "$TARGET_DIR" -type f -maxdepth 5)
关键逻辑说明
- 用
read -r读取文件名,避免文件名包含特殊字符(如反斜杠、空格)时出现解析错误 - 进程替换语法
< <(find命令)让while循环运行在当前shell环境,保证x变量的修改可以正常生效 - 计数判断内置于循环内部,每处理一个文件就校验计数,达标后自动休眠、重置计数后继续处理剩余文件
内容的提问来源于stack exchange,提问作者lucian_v
相关产品推荐
相关产品推荐

