我想在每个文件夹中创建文件。这是我的命令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
无需
cd进入目录即可在其中创建文件。不要解析的输出
ls。的输出ls仅用于查看。如果文件或目录的名称包含文字换行符或空格,则解析将中断。该模式
*/将匹配当前目录中的任何目录。引用您的变量扩展。如果将代码
IFS设置为数字,则代码将中断。
如果您确实需要对cd目录执行a操作,请在子shell中进行操作。更改后的工作目录仅影响子外壳,因此无需cd备份。
for dir in */; do ( cd "$dir" && touch test.txt ) done
湖上湖
TA贡献2003条经验 获得超2个赞
您cd进入目录,但是您不cd退出。假设列表中的第一个目录是1,您的脚本首先更改为1,然后尝试将其更改为1/10,该脚本不存在。
您可以cd -在触摸文件后执行“ a ”操作。
更好的是,您cd完全避免使用,touch $i/test.txt而是改为执行。
当然,编写的脚本不是很健壮:如果当前目录包含纯文件,则脚本将中断;如果包含名称中带有空格的条目,则脚本将中断-但这是另一个问题。
- 3 回答
- 0 关注
- 460 浏览
添加回答
举报
0/150
提交
取消
