我有一个像这样的文件夹结构:
.
+-- dir
| +-- subdir1
| +-- subdir2
| +-- subdir3
| +-- subdir4
我想使用Bash在每个index.html
内创建一个subdir
文件:
.
+-- dir
| +-- subdir1
| +-- index.html
| +-- subdir2
| +-- index.html
| +-- subdir3
| +-- index.html
| +-- subdir4
| +-- index.html
我可以使用以下命令列出所有子目录:
.
$ ls dir/*/
使用touch
创建一个文件,然后我认为正确的命令是:
.
$ touch dir/*/index.html
结果:touch: cannot touch 'dir/*/index.html': No such file or directory
如何使用Bash为每个子目录创建文件名?
答案 0 :(得分:3)
touch dir/*/index.html
无效 Globs仅将扩展到实际存在的内容,如果不存在匹配项,则将其扩展到glob表达式本身,并且shell选项都是默认配置。 (可以使用shopt -s nullglob
或shopt -s failglob
来配置此方案,以便在bash中不生成任何参数或出现错误情况。
因此,如果您有dir/subdir1/index.html
,但dir/subdir2/
但其中没有index.html
,则dir/*/index.html
将展开为仅包含dir/subdir1/index.html
,但不包含任何引用至subdir2
。
全球化存在的东西 - 目录 - 并坚持不做自己的事情:
for d in dir/*/; do touch -- "$d/index.html"; done
如果您的某个目录的名称以短划线开头,则需要--
:您不希望-dirname
被视为{{1}的选项}}; touch
表示所有未来的参数都被视为位置,防止出现这种情况。