Linux Shell:LOOP用于在每个文件夹中创建文件
收藏

专家
我想在每个文件夹中创建文件。这是我的命令

for i in `ls`;do cd $i;touch test.txt;done

-bash: cd: 10/: No such file or directory
-bash: cd: 2/: No such file or directory
-bash: cd: 3/: No such file or directory
-bash: cd: 4/: No such file or directory
-bash: cd: 5/: No such file or directory
-bash: cd: 6/: No such file or directory
-bash: cd: 7/: No such file or directory
-bash: cd: 8/: No such file or directory
-bash: cd: 9/: No such file or directory

它只在文件夹test.txt中生成1/,其余文件夹为空。我认为原因是我的命令缺少{ }来澄清循环的规模。
你能帮我更新我的命令吗?


最佳答案:

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

不需要cd进入目录就可以在那里创建文件。
不要分析ls的输出。ls的输出仅用于查看。如果文件或目录的名称包含文本换行符或空格,则解析将中断。
模式*/将匹配当前目录中的任何目录。
引用变量展开式。如果将IFS设置为数字,则代码将中断。
如果确实需要在目录中执行cd操作,请在子shell中执行。更改的工作目录只影响子shell,不需要返回。
for dir in */; do
   ( cd "$dir" && touch test.txt )
done

    公众号
    关注公众号订阅更多技术干货!