You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Bash循环忽略空目录?寻求更简洁实现方案

简洁实现Bash循环忽略空二级子目录并处理.py文件

需求:遍历所有二级子目录,将其中的.py文件移动到上级目录,随后删除该子目录,同时跳过空目录。以下是更简洁的实现方案:

方案1:改进原循环(无需目录切换)

原代码的cd操作可以省略,直接通过路径操作完成文件移动,同时简化空目录判断逻辑:

# 开启nullglob和dotglob,确保空目录匹配时返回空,且包含隐藏文件
shopt -s nullglob dotglob
for dir in */*/; do
    # 用数组存储目录内的所有文件,判断是否为空
    local files=("$dir"/*)
    (( ${#files[@]} == 0 )) && continue
    
    # 移动.py文件到上级目录
    mv "$dir"/*.py "$dir/.."
    # 删除该二级子目录
    rm -r "$dir"
done
# 恢复默认选项(可选,避免影响后续脚本)
shopt -u nullglob dotglob

优化点:

  • 去掉冗余的cd/cd -操作,直接通过路径引用文件,避免目录切换带来的潜在问题
  • 用数组存储目录内容,判断空目录的逻辑更直观可靠
  • 提前设置nullglob和dotglob,确保空目录的判断准确(不会出现$dir/*原样输出的情况)

方案2:用find命令一键完成

如果追求极致简洁,可以用find命令直接筛选非空二级子目录并执行处理逻辑:

find */* -type d -not -empty -exec sh -c '
    for dir do
        mv "$dir"/*.py "$dir/.."
        rm -r "$dir"
    done
' sh {} +

说明:

  • */*:匹配所有二级子目录
  • -type d:只筛选目录
  • -not -empty:排除空目录
  • -exec sh -c '...' sh {} +:批量将符合条件的目录传入脚本处理,效率更高

内容的提问来源于stack exchange,提问作者ThomasAllen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 11:40:48