如何修改Bash脚本:无文件生成时sleep后退出循环而非持续休眠
处理FAST5文件的Bash脚本修改实现
修改需求
原脚本逻辑:检测到文件则循环处理,未检测到文件则持续休眠陷入死循环。
需要改为:首次未检测到文件时休眠15秒,再次检测仍无文件则退出脚本;若休眠期间生成文件则继续处理流程。
修改后的脚本代码
#!/bin/bash current_directory=$(pwd) folder=1 # 定义休眠等待时间(秒) WAIT_TIME=15 while [ $folder -le 100 ]; do # 检测当前fast5目录下的文件数量(避免ls命令的空格问题,改用find更可靠) fast5files=$(find "$current_directory/fast5" -maxdepth 1 -type f -name "*.fast5" | wc -l) if [ $fast5files -ge 1 ]; then # 创建目标文件夹并移动文件 mkdir -p "$current_directory/fast5/$folder" mv "$current_directory/fast5"/*.fast5 "$current_directory/fast5/$folder/" # 执行fast5文件处理程序 # program does something to fast5files here # another program does something to fast5files here # 用户指定的休眠时间 sleep "$1" ((folder++)) else echo "未找到足够的fast5文件,等待${WAIT_TIME}秒..." sleep "$WAIT_TIME" # 休眠后再次检测文件数量 fast5files_after_wait=$(find "$current_directory/fast5" -maxdepth 1 -type f -name "*.fast5" | wc -l) if [ $fast5files_after_wait -eq 0 ]; then echo "仍未检测到fast5文件,退出脚本" exit 1 fi # 若检测到文件,循环会回到顶部重新执行处理逻辑 fi done
关键修改说明
- 修正语法错误:移除原脚本中重复且无法触发的
elif分支,重构无文件时的处理逻辑 - 二次检测机制:首次检测无文件后,休眠指定时间再次检查文件状态,根据结果决定退出或继续
- 优化文件检测:将原
ls + grep的方式替换为find命令,避免文件名含空格或特殊字符时的统计错误 - 健壮性提升:使用
mkdir -p确保文件夹创建成功,避免因文件夹已存在导致脚本中断
内容的提问来源于stack exchange,提问作者littleMinIONbasher
相关产品推荐
相关产品推荐

