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

求批量处理子目录的循环脚本:迁移文件并删除指定子文件夹

批量处理用户目录脚本优化方案

需求场景

现有目录结构如下:

Main_folder
-->DePreter.Jonas
-->Huistaak1-HelloWorld_Jonas.DePreter.s.ua_poging_2019-11-12
--> (文件和子目录名称不限)
-->(其他用户目录名)
-->Huistaa1-HelloWorld_(用户名)...
--> 更多文件
...

需要遍历Main_folder下的每个用户目录(如DePreter.Jonas),将其中以Huistaak1开头的子目录内的所有内容(包括隐藏文件)移动到该用户目录根目录,随后删除这个Huistaak1开头的子目录。目前已有重复的单目录处理脚本,需改为循环实现批量处理。

现有单目录处理脚本

cd DePreter.Jonas
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Feremans.Len
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Hofkens.Peter
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Janssens.Jan
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd Peters.Jolien
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

cd VanHoof.Sarah
mv */* */.* . 
find . -type d -name "Huistaak1*" -delete
cd ..

优化后的批量处理脚本

直接在Main_folder目录下执行以下脚本即可:

# 遍历当前目录下的所有用户子目录
for user_dir in */; do
    # 进入用户目录,失败则跳过
    cd "$user_dir" || continue
    
    # 定位所有Huistaak1开头的一级子目录,逐个移动内容
    find . -maxdepth 1 -type d -name "Huistaak1*" | while read -r task_dir; do
        # 移动目录内所有文件(含隐藏文件),忽略无隐藏文件时的报错
        mv "$task_dir"/* "$task_dir"/.* . 2>/dev/null
    done
    
    # 删除所有Huistaak1开头的一级子目录
    find . -maxdepth 1 -type d -name "Huistaak1*" -delete
    
    # 返回上级目录
    cd ..
done

脚本说明

  • for user_dir in */;:遍历当前目录下的所有子目录(即用户目录)
  • cd "$user_dir" || continue:进入用户目录,若遇权限不足等问题导致进入失败,直接跳过该目录
  • find . -maxdepth 1 -type d -name "Huistaak1*":仅在当前用户目录下查找一级的Huistaak1开头目录,避免递归查找深层无关目录
  • mv "$task_dir"/* "$task_dir"/.* . 2>/dev/null:移动目标目录下的所有普通文件和隐藏文件到用户目录根目录,2>/dev/null用来屏蔽无隐藏文件时的报错信息
  • find . -maxdepth 1 -type d -name "Huistaak1*" -delete:精准删除用户目录下一级的Huistaak1开头目录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:01:07