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/,其余文件夹为空白。我认为原因是我的命令缺乏{ }澄清LOOP的规模。


你能帮我更新我的命令吗?


至尊宝的传说
浏览 370回答 3
3回答

白猪掌柜的

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

湖上湖

您cd进入目录,但是您不cd退出。假设列表中的第一个目录是1,您的脚本首先更改为1,然后尝试将其更改为1/10,该脚本不存在。您可以cd -在触摸文件后执行“ a ”操作。更好的是,您cd完全避免使用,touch $i/test.txt而是改为执行。当然,编写的脚本不是很健壮:如果当前目录包含纯文件,则脚本将中断;如果包含名称中带有空格的条目,则脚本将中断-但这是另一个问题。
打开App,查看更多内容
随时随地看视频慕课网APP