我想在每个文件夹中创建文件。这是我的命令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 关注
- 409 浏览
添加回答
举报
0/150
提交
取消