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

编写循环删除子目录指定文件的问题求助

解决方法

你的原命令存在几个关键问题:

  • ./main_directory/*会匹配该目录下所有文件和子目录,如果目录下存在普通文件,cd到文件会直接报错
  • 每次cd后没有回到原目录,第二次循环时当前路径已经是第一个子目录,再执行cd $file就会找不到正确路径
  • 未处理目录名含空格或特殊字符的情况

下面给你两种可靠的解决方案:

方法1:改进循环(直接操作路径,无需cd)

用*/只匹配子目录,直接通过路径删除文件,避免cd带来的路径问题:

for dir in ./main_directory/*/; do
    rm "$dir"*.txt
done
  • ./main_directory/*/中的/确保只匹配子目录,不会选中普通文件
  • "$dir"加引号是为了兼容目录名含空格、特殊字符的场景

方法2:用find命令(更灵活可靠)

如果子目录结构复杂,或者需要更精确的筛选控制,find命令是更好的选择:

find ./main_directory -type f -name "*.txt" -maxdepth 2 -mindepth 2 -delete

参数说明:

  • -type f:只匹配普通文件(排除目录)
  • -name "*.txt":筛选后缀为.txt的文件
  • -maxdepth 2 -mindepth 2:限制只查找main_directory下一级子目录里的文件,不会递归更深,也不会删除main_directory根目录下的txt文件
  • -delete:直接删除匹配到的文件(如果想先预览要删除的文件,可去掉-delete,先查看输出确认)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 19:50:25