对于以下树结构:
.
└── dir1
└── dir2
└── dir3
为每个目录创建一个文件(可以为空)的简单方法是什么,因此生成的树将如下所示:
.
├── dir1
│ ├── dir2
│ │ ├── dir3
│ │ │ └── README
│ │ └── README
│ └── README
└── README
答案1
和zsh
:
touch -- README **/*(N/e[REPLY+=/README])
N
ullglob:如果没有匹配,则不会触发错误。/
:限制文件类型目录e[code]
:e
评估code
每个文件的 ,此处附加/README
到文件路径(存储$REPLY
在评估的代码中)。
或者你可以使用匿名函数它传递目录列表,并将 附加/README
到它传递给的参数中的每个目录touch
:
() {touch -- $^@/README} . **/*(N/)
(和rc 风格的数组扩展@
对于使用语法的匿名函数参数$^array
)。
在所有这些中,您可以添加D
otglob glob 限定符来添加README
到隐藏目录。
答案2
您可以使用 find 来做到这一点:
find . -mindepth 1 -type d -exec touch "{}/README" \;
解释
-mindepth 1
将设置最小深度,以避免包含当前目录-type d
只会找到目录-exec
将运行命令{}
包含找到的目录的路径
如果您只想使用内置 shell 命令:
for dir in *; do if [ -d "$dir" ]; then touch "$dir/README"; fi; done
解释
for
将循环遍历 中的每个元素*
,即当前目录中的所有文件。dir
将在循环期间包含当前元素。if [ -d $dir ]
检查该元素是否是一个目录,然后README
创建一个以包含的目录名命名的文件$dir