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

请求修正Linux Shell循环批量在各文件夹创建文件的命令

解决循环在子文件夹创建文件的问题

你猜的方向没错,但还有个更关键的细节你没注意到——第一次切换目录后,你没回到原目录!

咱们拆解下你原命令的执行逻辑就懂了:

  1. 循环第一个目标是1/,执行cd 1/成功进入子目录,接着创建test.txt,这步没问题;
  2. 循环第二个目标是2/,但此时你还在./1/目录里,执行cd 2/自然找不到这个文件夹,直接报错;
  3. 后续所有循环都会重复这个错误,自然只有第一个文件夹里生成了文件。

另外补充个小坑:用ls遍历文件/目录其实是个坏习惯,要是遇到带空格或特殊字符的文件夹名,直接就会出错。更稳妥的方式是用通配符*/来匹配所有子目录。

给你几个修正后的方案,按推荐程度排序:

方案1:不切换目录,直接创建文件(最推荐)

不用来回切换目录,直接通过路径拼接创建文件,简单又安全:

for i in */; do touch "$i/test.txt"; done
  • */会精准匹配当前目录下所有子目录(末尾的/能避免匹配普通文件);
  • "$i"加双引号是为了兼容带空格、特殊字符的目录名。

方案2:切换目录后及时返回

如果一定要用cd的方式,记得每次操作完要回到原目录,或者用子shell隔离目录变化:

方式A:手动返回上级目录

for i in */; do cd "$i"; touch test.txt; cd ..; done

方式B:用子shell隔离环境

把切换目录和创建文件的命令放在括号里,子shell的目录变化不会影响父shell,执行完自动回到原目录:

for i in */; do (cd "$i"; touch test.txt); done

方式C:用pushd/popd管理目录

适合目录层级复杂的场景,pushd保存当前目录,popd快速恢复:

for i in */; do pushd "$i"; touch test.txt; popd; done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:09:45