为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

至尊宝的传说 2021-04-09 16:13:13
我想在每个文件夹中创建文件。这是我的命令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/,其余文件夹为空白。我认为原因是我的命令缺乏{ }澄清LOOP的规模。你能帮我更新我的命令吗?
查看完整描述

3 回答

?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

for dir in */; do
   touch "$dir/test.txt"
done
  1. 无需cd进入目录即可在其中创建文件。

  2. 不要解析的输出ls。的输出ls仅用于查看。如果文件或目录的名称包含文字换行符或空格,则解析将中断。

  3. 该模式*/将匹配当前目录中的任何目录。

  4. 引用您的变量扩展。如果将代码IFS设置为数字,则代码将中断。

如果您确实需要对cd目录执行a操作,请在子shell中进行操作。更改后的工作目录仅影响子外壳,因此无需cd备份。

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


查看完整回答
反对 回复 2021-04-16
?
湖上湖

TA贡献2003条经验 获得超2个赞

cd进入目录,但是您不cd退出。假设列表中的第一个目录是1,您的脚本首先更改为1,然后尝试将其更改为1/10,该脚本不存在。

您可以cd -在触摸文件后执行“ a ”操作。

更好的是,您cd完全避免使用,touch $i/test.txt而是改为执行。

当然,编写的脚本不是很健壮:如果当前目录包含纯文件,则脚本将中断;如果包含名称中带有空格的条目,则脚本将中断-但这是另一个问题。


查看完整回答
反对 回复 2021-04-16
  • 3 回答
  • 0 关注
  • 365 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信